我有一個RCpp代碼,其中我試圖將一個DataFrame轉換爲Matrix的一部分代碼。 DataFrame只有數字(沒有字符串或日期)。將DataFrame轉換爲RCpp中矩陣的最佳方式
下面的代碼工作:
//[[Rcpp::export]]
NumericMatrix testDFtoNM1(DataFrame x) {
int nRows=x.nrows();
NumericMatrix y(nRows,x.size());
for (int i=0; i<x.size();i++) {
y(_,i)=NumericVector(x[i]);
}
return y;
}
我不知道是否有在RCPP另一種方式(即R中的as.matrix
等價物)做類似下面的下面的代碼相同的東西(不工作):
//[[Rcpp::export]]
NumericMatrix testDFtoNM(DataFrame x) {
NumericMatrix y(x);
return y;
}
*編輯*
感謝您的答案。正如Dirk所建議的那樣,C++代碼比兩個答案中的任何一個快約24倍,Function
版本比internal::convert_using_rfunction
版本快2%。
我最初在RCpp中尋找答案,但沒有打電話給R.當我發佈我的問題時,應該清楚地說明。
我會去與你的問題,你有解決方案。我們可能需要一個更好的方法來從data.frame中獲得'n'和'k'(即作爲名稱向量的長度)。否則,這是我喜歡的一個很好的解決方案,以及一些建議的答案。 –
我對n和k檢索器當然是錯誤的,因爲我們有'.size()',我主要想到的是與矩陣相似的函數。可以補充說,在某些時候... –