我想使用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属性(自动为您处理从intIntegerVector的转换):

#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/

10-12 17:12