我是Rcpp的新用户,我正在写一个包。 我在一个脚本中定义了两个函数,并尝试在循环中调用另一个函数。
我的一个功能定义如下:
GetType()
我用来调用这个函数的循环如下所示:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
double timesTwo(colvec x, NumericVector group, double k,
NumericVector unique_group)
{
vec beta(x.begin(),x.size(),false);
vec Group(group.begin(),group.size(),false);
vec unigroup(unique_group.begin(),unique_group.size(),false);
beta = pow(beta,k);
int g = unigroup.size();
int j = 0;
uvec st ;
double b=0;
for(j = 0; j < g; j++)
{
st = find(Group == unigroup[j]);
b = b + abs(pow(sum(beta.elem(st)),1/k));
}
double s = b;
return s;
}
我的问题就像我在循环中所说的那样,因为我想根据 XtXi_beta_plus.col(i) = X_MAT * BETA_NEW.col(2*i);
XtXi_beta_minus.col(i) = X_MAT * BETA_NEW.col(2*i+1);
loss_new_1.col(i) = (Y - ited / (ited + exp( -XtXi_beta_plus.col(i))));
loss_new_2.col(i) = (Y - ited / (ited + exp( -XtXi_beta_minus.col(i))));
new_loss(2*i) = accu(loss_new_1.col(i) % loss_new_1.col(i));
new_loss(2*i+1) = accu(loss_new_2.col(i) % loss_new_2.col(i));
z = BETA_NEW.col(2*i);
w = BETA_NEW.col(2*i+1);
// when 88 line was change to BETA_NEW.col(2*i) there is an error
// if you keep use Z, there is no update
// best!
pen_new_positive(i) = as<double>(timesTwo(z,group,k,unique_group));
更新pen_new_postive(i)
但是当我直接将BETA_NEW.col(2*i)
放在{{1}内时函数,无论我如何改变输入
函数类型(BETA_NEW.COL(2*i)
或timesTwo
或其他)存在如下错误:
colvec
但是,当我在mat
函数中直接使用 cannot convert "const::arma::subview_col<double> to "SEXP" in
initialization"
时,循环中的z
没有更新。
任何人都可以给我一个关于如何处理这个问题的提示?
我的代码的完整版本在第二个块中,如下所示:
timesTwo