在构造函数的R列表中读取会引发错误:期望单个值

时间:2014-10-28 18:51:10

标签: c++ r rcpp

我正在使用Rcpp / RcppArmadillo编译一个包,我收到一个错误,我相信它来自Rcpp as.h header。我编写了一个构造函数,它从R中获取一个列表并创建适当的类。调用构造函数和实际构造函数的函数如下所示。我试图在列表和数据框上遵循此处显示的代码(http://adv-r.had.co.nz/Rcpp.html)。

#include "varInf.h"

//[[Rcpp::depends(RcppArmadillo)]]
//[[Rcpp::export]]
void varInfInput(Rcpp::List model_r)
{
    mm_model model = mm_model(model_r);
    varInfC(model);
}

这是构造函数mm_model.h,它包含在varInf.h中

using namespace Rcpp ;
using namespace arma;
class mm_model
{
public:
int T ;
int J ;
IntegerVector Rj ;
int maxR ;
IntegerVector Nijr ;
int maxN ;
int K ;
IntegerVector Vj ;
int maxV ;
NumericVector alpha;
NumericVector theta;
IntegerVector Z ;
NumericVector lambda ;
NumericVector phi ;
NumericVector delta ;
NumericVector obs ;
int dist;

mm_model(List model)
{
    T = (int) model[0];
    J = (int) model[1];
    Rj = as<IntegerVector>(model[2]);
    maxR = max(Rj);
    Nijr = as<IntegerVector>(model[3]);
    maxN = max(Nijr);
    K = (int) model[4];
    Vj = as<IntegerVector>(model[5]);
    maxV = max(Vj);
    alpha = as<NumericVector>(model[6]);
    theta = as<NumericVector>(model[7]);
    Z = as<IntegerVector>(model[8]);
    lambda = as<NumericVector>(model[9]);
    phi = as<NumericVector>(model[10]);
    delta = as<NumericVector>(model[11]);
    obs = as<NumericVector>(model[12]);
    dist = (int) model[13];
}
}

当我从R调用(自动生成的包装器)varInfInput时,它会抛出以下错误。

Error: expecting a single value 
3 stop(structure(list(message = "expecting a single value", call = NULL, 
cppstack = NULL), .Names = c("message", "call", "cppstack"
), class = c("Rcpp::not_compatible", "C++Error", "error", "condition"
))) 
2 varInfInput(output) at varInfFit.R#14
1 mmVarFit(test_model) 

我很新,并且一直在努力阅读,所以即使是对可能有用的内容的引用也会非常感激。

1 个答案:

答案 0 :(得分:0)

我认为我解决了自己的问题。当我读到int时,它们仍然作为SEXP对象被读入,我不能将它们强制转换为int。当我使用

T = as<IntegerVector>(model[0])[0]; 

它似乎按预期工作