How create an Rcpp NumericVector with more than 20 entries?

后端 未结 2 1846
萌比男神i
萌比男神i 2021-01-19 16:21

Creating a NumericVector with more than 20 elements leads to error messages. This is in agreement with this document (at the very bottom): http://statr.me/rcpp-note/api/Vec

2条回答
  •  礼貌的吻别
    2021-01-19 17:25

    Bob already showed you that a) you mistakenly took the constraint on the macro-defined create() helper to be binding, and b) how to do this via the inline package and loops.

    Here is an alternate solution using Rcpp Attribute. Copy the following to a file, say, /tmp/named.cpp:

    #include 
    
    using namespace Rcpp;
    
    // [[Rcpp::export]]
    NumericVector makevec(CharacterVector nm) {
        NumericVector v(nm.size());
        v = Range(1, nm.size());
        v.attr("names") = nm;
        return v;
    }
    
    /*** R
    makevec(LETTERS)
    makevec(letters[1:10])
    */
    

    Simply calling sourceCpp("/tmp/named.cpp") will compile, link, load and also execute the R illustration at the bottom:

    R> sourceCpp("/tmp/named.cpp")
    
    R> makevec(LETTERS)
     A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 
     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
    
    R> makevec(letters[1:10])
     a  b  c  d  e  f  g  h  i  j 
     1  2  3  4  5  6  7  8  9 10 
    R> 
    

提交回复
热议问题