У меня есть код RCpp, где в части кода я пытаюсь преобразовать DataFrame в матрицу. 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;
}
мне было интересно, если есть альтернативный способ (т.е. эквивалент as.matrix
в R) в RCpp делать то же самое, что-то похожее на следующий код ниже (который не делает работа):
//[[Rcpp::export]]
NumericMatrix testDFtoNM(DataFrame x) {
NumericMatrix y(x);
return y;
}
* EDIT *
Спасибо за ответы. Как предложил Дирк, код C++ примерно в 24 раза быстрее, чем любой из двух ответов, а версия Function
на 2% быстрее, чем версия internal::convert_using_rfunction
.
Первоначально я искал ответ в RCpp без вызова R. Должно было сделать это ясно, когда я разместил свой вопрос.
Я бы пойти с решением, которое вы имеете в вашем вопросе. Нам может понадобиться лучший способ получить 'n', а также' k' из data.frame (т. Е. Как длина вектора имен). В противном случае это хорошее решение в моем уме, которое мне нравится, а также некоторые из предложенных ответов. –
И я, конечно, ошибался в отношении n и k ретриверов, так как у нас есть '.size()', я в основном думал о функциях с похожими именами с именами для матриц. Может добавить, что в какой-то момент ... –