Dear Duncan,
Thank you. I really appreciate your help!
Yes, the Fedora warning is self explanatory, but I'm still quite
confused. Below are part of my Mstep.cpp file (both functions are in the
same file). The fedora warned me that, among others,
Mstep.cpp:62:69: warning: explicitly assigning value of variable of type
'int' to itself [-Wself-assign]
arma::vec Pj = Calc_Pj(par = par, designMj = designMj, linkfunc =
linkfunc, boundary = boundary, eps = eps);
~~~~~~~~ ^
~~~~~~~~
So, basically, I called Calc_Pj function from Calc_Pj_jac function, but
not sure why this is not allowed.
----------------------------
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
arma::vec Calc_Pj(const arma::vec par, const arma::mat designMj,
const int & linkfunc,int boundary = 0,const double eps = 1e-16){
arma::vec Pj;
if(linkfunc==1){ //identity
Pj = designMj*par;
}else if(linkfunc==2){//logit
Pj = exp(designMj*par)/(1 + exp(designMj*par));
}else if(linkfunc==3){//log
Pj = exp(designMj*par);
}
if(boundary==1){
Pj.elem(find(Pj<eps)).fill(eps);
Pj.elem(find(Pj>1-eps)).fill(1-eps);
}
return Pj;
}
// [[Rcpp::export]]
arma::mat Calc_Pj_jac(arma::vec par,
arma::mat designMj,
int & linkfunc,
int boundary = 0,
double eps = 1e-16){
arma::mat ret = designMj;
if(linkfunc>1){
arma::vec Pj = Calc_Pj(par = par, designMj = designMj, linkfunc =
linkfunc, boundary = boundary, eps = eps);
if(linkfunc==2){//logit
ret.each_col() %= Pj%(1-Pj);
}else if(linkfunc==3){//log
ret.each_col() %= Pj;
}
}
return ret;
}
On 3/24/2018 6:18 PM, Duncan Murdoch wrote:
On 24/03/2018 9:28 AM, Wenchao Ma wrote:
Dear all,
I just submitted a package to CRAN. It went well on my computer and
winbuilder, but produced warning and error messages on some linux and
solaris systems, as shown here:
https://cran.r-project.org/web/checks/check_results_GDINA.html
Does anyone know what is going on here?
The compilers on those systems are set up to be more sensitive to coding
problems than yours.
The Solaris error comes from your code
arma::umat B = arma::ones<arma::umat>(K,pow(2,K)-K-1);
The library you're using has no function definition for pow() that takes
2 integers. If a float or double result is okay, you could use pow(2.0,
K). If you really need an int in that argument, you'll need to typecast
or write your own pow() function.
The Fedora warning seems self explanatory:
Mstep.cpp:62:69: warning: explicitly assigning value of variable of type
'int' to itself [-Wself-assign]
Take a look at that line (and the other similar ones) and see why the
compiler thinks you've got something like
i = i;
in your code.
Duncan Murdoch
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel