如何为元素2到101切片Rcpp NumericVector?

时间:2017-11-12 06:41:50

标签: rcpp

您好我正在尝试将Rcpp的NumericVector切换为元素2到101

在R中,我会这样做:

array[2:101]

我如何在RCpp中做同样的事情?

我试着看这里:http://gallery.rcpp.org/articles/subsetting/ 但是该资源有一个使用IntegerVector :: create()列出所有元素的示例。但是,:: create()受元素数量的限制。 (除了繁琐)。给定2个指数的任何方法都可以切割一个向量?

1 个答案:

答案 0 :(得分:5)

这可以通过 Rcpp Range功能实现。这将生成等效的 C ++ 位置索引序列。 e.g。

Rcpp::Range(0, 3)

会给:

0 1 2 3

注意: C ++ 索引从0开始而不是1!

示例:

#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::NumericVector subset_range(Rcpp::NumericVector x,
                                 int start = 1, int end = 100) {

  // Use the Range function to create a positional index sequence
  return x[Rcpp::Range(start, end)];
}

/***R
x = rnorm(101)

# Note: C++ indices start at 0 not 1!
all.equal(x[2:101], subset_range(x, 1, 100))
*/