2015-11-05 22 views

回答

5

創建您需要的大小的向量,然後分配值&名稱。這是一個RCPP「內聯」功能(方便鄉親們嘗試一下),但它會在你的環境中工作:

library(Rcpp) 
library(inline) 

big_vec <- rcpp(body=" 
NumericVector run(26); 
CharacterVector run_names(26); 

# make up some data 
for (int i=0; i<26; i++) { run[i] = i+1; }; 

# make up some names 
for (int i=0; i<26; i++) { run_names[i] = std::string(1, (char)('A'+i)); }; 

run.names() = run_names; 

return(run); 
") 

big_vec() 
## 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 
4

鮑勃已經表現出你是一個),你誤了約束的宏觀定義create()助手要綁定,以及b)如何通過內聯包和循環來完成此操作。

這是使用Rcpp屬性的備用解決方案。以下複製到文件,比方說,/tmp/named.cpp

#include <Rcpp.h> 

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]) 
*/ 

簡單地調用sourceCpp("/tmp/named.cpp")將編譯,連接,加載並在底部運行將R圖:

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>