Rcpp循环更新变量里面

时间:2017-04-22 18:28:51

标签: c++ r rcpp armadillo

我是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

0 个答案:

没有答案