读取构造函数的R列表会引发错误:应为单个值
Reading in an R list for a constructor throws error: expecting a single value
我正在用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];
它似乎按预期工作
相关文章:
- __int64 CString 返回错误的值 - C++ MFC
- srand() 输出了错误的值
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- 除法函数返回错误的值
- QScreen geometry()api为分辨率2736 x 1824和2560 x 1600提供了错误的值
- 错误的值是使用c++从CSV文件数据写入数组
- fscanf() 输出错误的值
- 大数的乘法会产生错误的值
- C++ std::tm 从 std::chrono::time_point 转换后返回错误的值
- 编译器错误 假定值MB_LEN_MAX错误
- 标准库to_string(双精度)在 vs2015 中给出错误的值.有什么解决办法吗?
- 允许对单个值进行隐式转换
- Python - 从 c++ DLL 错误打印值
- 蓝牙LE:设置字节数组的特征会发送错误的值
- 连接 OpenCV 垫和单个值
- 将大小为编译时常量的数组初始化为单个值
- 线程安全 std::map:锁定整个映射和单个值
- 合并排序返回错误的值
- 检查Windows激活状态返回错误的值
- 读取构造函数的R列表会引发错误:应为单个值