我有一个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;
}
我想知道在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.当我发布我的问题时,我应该说清楚。
答案 0 :(得分:7)
与Gabor的版本类似,你可以这样做:
#include <Rcpp.h>
using namespace Rcpp ;
//[[Rcpp::export]]
NumericMatrix testDFtoNM(DataFrame x) {
NumericMatrix y = internal::convert_using_rfunction(x, "as.matrix");
return y;
}
答案 1 :(得分:6)
如果你不介意回叫R,可以这样紧凑地完成:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericMatrix DF2mat(DataFrame x) {
Function asMatrix("as.matrix");
return asMatrix(x);
}
更新合并了Romain的评论。