我有一个RCpp代码,在我试图将DataFrame转换为Matrix的代码的一部分.DataFrame只有数字(没有字符串或日期).
以下代码有效:
//[[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;
}
Run Code Online (Sandbox Code Playgroud)
我想知道as.matrix在RCpp中是否有替代方式(即R中的等价物)来做同样的事情,类似于下面的代码(这不起作用):
//[[Rcpp::export]]
NumericMatrix testDFtoNM(DataFrame x) {
NumericMatrix y(x);
return y;
}
Run Code Online (Sandbox Code Playgroud)
*编辑*
谢谢你的回答.正如Dirk所说,C++代码比两个答案中的任何一个快24倍,Function版本比internal::convert_using_rfunction版本快2%.
我最初在没有打电话给R的情况下寻找RCpp的答案.当我发布我的问题时,我应该说清楚.
与Gabor的版本类似,你可以这样做:
#include <Rcpp.h>
using namespace Rcpp ;
//[[Rcpp::export]]
NumericMatrix testDFtoNM(DataFrame x) {
NumericMatrix y = internal::convert_using_rfunction(x, "as.matrix");
return y;
}
Run Code Online (Sandbox Code Playgroud)
如果你不介意回调R,它可以像这样紧凑地完成:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericMatrix DF2mat(DataFrame x) {
Function asMatrix("as.matrix");
return asMatrix(x);
}
Run Code Online (Sandbox Code Playgroud)
更新 Romain的评论.