我想使用Rcpp访问整数向量中的第二个唯一元素的值,但我得到的零向量的长度等于整数向量中第二项的值。我究竟做错了什么?
require(Rcpp)
cppFunction("NumericVector test(IntegerVector labelling1) {
IntegerVector lvls = unique(labelling1);
return(lvls[1]);
}")
test(1:5)
#[1] 0 0
最佳答案
实际上,这里存在一个单独的问题:您试图从NumericVector
构造int
,并且Rcpp执行以下操作:
您的函数正在返回整数值2
,NumericVector
被构造为NumericVector(2)
;即长度为2的NumericVector
。
如果您真正想要的是表示该索引值的IntegerVector
,则必须编写:
IntegerVector test(IntegerVector labelling1) {
IntegerVector lvls = unique(labelling1);
return IntegerVector::create(lvls[1]);
}
或者,您也可以使用Rcpp属性(自动为您处理从
int
到IntegerVector
的转换):#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int test(IntegerVector labelling1) {
IntegerVector lvls = unique(labelling1);
return lvls[1];
}
/*** R
test(1:5)
*/
关于c++ - 我不了解Rcpp中的这种行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26477803/