How to slice Rcpp NumericVector for elements 2 to 101?

后端 未结 1 1440
栀梦
栀梦 2021-01-05 17:14

Hi I\'m trying to slice Rcpp\'s NumericVector for elements 2 to 101

in R, I would do this:

array[2:101]

How do I do the same in RCp

1条回答
  •  广开言路
    2021-01-05 17:44

    This is possible with Rcpp's Range function. This generates the equivalent C++ positional index sequence. e.g.

    Rcpp::Range(0, 3)
    

    would give:

    0 1 2 3
    

    Note: C++ indices begin at 0 not 1!

    Example:

    #include 
    
    // [[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))
    */
    

    0 讨论(0)
提交回复
热议问题