Search code examples
rrcpp

How to convert seq_len into Rcpp equivalent


I just started learning Rcpp, and I'd like to convert the following function into Rcpp:

foo <- function(N) {
   out <- c()
   for (i in (seq_len(N-1)+1)){
      out[i-1] <- i + 1
   }
   return(out)
}

This is my attempt so far, but it's not quite outputting what I want.

cppFunction("NumericVector bar(int N) {
            NumericVector out (N);
            for(int i = 1; i < N + 1; i++) {
            out(i - 1) = i + 1;
            }
            return(out);
            }")

Solution

  • Indices in C run from 0 on.
    Try

    library(Rcpp)
    
    cppFunction("NumericVector bar(int N) {
            NumericVector out (N-1);
            for(int i = 0; i < N-1   ; i++) {
              out(i) = i + 3;
            }
            return(out);
            }")
    
    foo(4)
    #> [1] 3 4 5
    bar(4)
    #> [1] 3 4 5
    

    foo as defined is a bit counter-intuitive because it outputs one element less than its argument N