創建超過20個元素的NumericVector會產生錯誤消息。 這與本文檔一致(底部):http://statr.me/rcpp-note/api/Vector_funs.html如何創建超過20個條目的Rcpp NumericVector?
目前,我公開了一個類(使用RCPP_MODULE),其中一個方法返回所需的NumericVector。我怎樣才能返回20多個元素?
創建超過20個元素的NumericVector會產生錯誤消息。 這與本文檔一致(底部):http://statr.me/rcpp-note/api/Vector_funs.html如何創建超過20個條目的Rcpp NumericVector?
目前,我公開了一個類(使用RCPP_MODULE),其中一個方法返回所需的NumericVector。我怎樣才能返回20多個元素?
創建您需要的大小的向量,然後分配值&名稱。這是一個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
鮑勃已經表現出你是一個),你誤了約束的宏觀定義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>