所以我从C++调用了一些R代码,并且我直接调用了R.dll(我知道关于Rcpp的知识,办公桌,但我不能用它来做这件事)。我有一个R脚本来设置一个变量,我想访问该变量的内容。在C++中嵌入R:访问VECSXP的元素
变量是字符串列表;在C++中,当我做TYPEOF(my_sexp)时,我得到VECSXP;到现在为止还挺好。现在我想将该列表的内容读入std :: vector。我曾尝试以下想法的许多排列:
SEXP vector_exp = VECTOR_ELT(my_sexp, 0);
int element_count = TRUELENGTH(vector_exp);
for (int i = 0 ; i < element_count ; i++) {
SEXP elem_sexp = VECTOR_ELT(my_sexp, i);
std::string element_string = R_CHAR(elem_sexp);
}
我的问题: - 使用TRUELENGTH,我可以访问冲突。使用长度,我得到一个错误的价值。 - 使用VECTOR_ELT()访问列表元素会导致访问冲突。 - 我已经尝试根据R头文件中的结构定义手动检查my_sexp的内存布局,但我似乎无法获得铸件权利以从中获得有意义的值。
那么,有没有人可以粗略地告诉我如何访问列表中的元素;或者指点我一个例子;或者将我指向Rcpp中这样的转换所在的位置?我试图自己找到最后一点,但没有得到太多 - 看起来像Rcpp的wrap()以某种方式“神奇地”处理它(通常)。
在此先感谢。
出于好奇,为什么你不能使用Rcpp? – cdeterman
或者,更明显的是,[RInside](http://dirk.eddelbuettel.com/code/rinside.html) - 当然会使用[Rcpp](http://dirk.eddelbuettel。com/code/rcpp.html) –
我正在使用Visual Studio,并且我不希望代理之间的整体构建将包含第二个工具链。 – Roel