读取构造函数的R列表会引发错误:应为单个值

Reading in an R list for a constructor throws error: expecting a single value

本文关键字:错误 单个值 构造函数 列表 读取      更新时间:2023-10-16

我正在用Rcpp/RcppArmadillo编译一个包,我认为这个错误来自Rcpp as.h头。我编写了一个构造函数,它从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);
}

这是varInf.h 中包含的构造函数mm_model.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) 

我是个新手,一直在尽可能多地阅读,所以即使提到一些可能有帮助的东西也会非常感激。

我想我解决了自己的问题。当我读取int时,它们仍然被读取为SEXP对象,我不能只是将它们类型转换为int。当我使用时

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

它似乎按预期工作