如何用Rcpp将嵌套列表的字符元素转为StringVector?编译报错求助
解决Rcpp嵌套列表转StringVector的编译问题
问题原因
你的代码编译失败主要有两个问题:
- Rcpp中访问列表元素需用方括号
[],而非圆括号(),圆括号会被识别为函数调用语法,导致编译报错。 - 从列表取出的元素是通用的SEXP类型,需要显式转换为
Rcpp::String类型才能赋值给StringVector。
修正后的代码
Rcpp::cppFunction(' Rcpp::StringVector foo(Rcpp::List lst) { Rcpp::StringVector res(2); res[0] = "aha"; Rcpp::List tmp = lst[1]; // 改用方括号访问列表元素 res[1] = Rcpp::String(tmp[1]); // 显式转换为String类型 return res; } ')
测试验证
运行以下R代码即可得到预期输出:
films = list(list("a"), list("B", "bingo")) foo(films) # [1] "aha" "bingo"
补充说明
如果不确定列表中元素的类型,也可以用as<Rcpp::String>()来转换,效果和Rcpp::String()一致:
res[1] = as<Rcpp::String>(tmp[1]);
内容的提问来源于stack exchange,提问作者s_baldur
相关产品推荐
相关产品推荐

