В качестве продолжения до this question я решил спуститься по маршруту Rcpp по сравнению со сложным синтаксисом в R. Я думаю, что это обеспечит лучшую читаемость (и, возможно, также будет быстрее).Rcpp - извлечение строк из списка матриц/dataframes
Предположим, у меня есть список data.frame
s (который я могу легко преобразовать в матрицы через as
). Учитывая предшествующие answe-r-s, это кажется лучшим подходом.
# input data
my_list <- vector("list", length= 10)
set.seed(65L)
for (i in 1:10) {
my_list[[i]] <- data.frame(matrix(rnorm(10000),ncol=10))
# alternatively
# my_list[[i]] <- matrix(rnorm(10000),ncol=10)
}
Каким образом можно извлечь строки из матриц? Цель состоит в том, чтобы создать список с каждым элементом списка, содержащим список из nr
-й строки каждого из данных dataframes исходного списка. Я попробовал несколько различных синтаксисом и продолжаю получать ошибки:
#include <Rcpp.h>
using namespace Rcpp;
using namespace std:
List foo(const List& my_list, const int& n_geo) {
int n_list = my_list.size();
std::vector<std::vector<double> > list2(n_geo);
// needed code....
return wrap(list2);
}
варианты
for (int i = 0; i < n_list; i++) {
for (int nr = 0; nr < n_geo; nr++) {
list2[nr][i] = my_list[i].row(nr);
// or list2[nr].push_back(my_list[i].row(nr));
// or list2[nr].push_back(as<double>(my_list[i].row(nr)));
// or list2[nr].push_back(as<double>(my_list[i](nr, _)));
}
}
// or:
NumericMatrix a = my_list[1]
...
NumericMatrix j = my_list[10]
for (int nr = 0; nr < n_geo; nr++) {
list2[nr][1] = // as above
}
Ни один из них не работает для меня. Что я делаю не так? Вот ошибки, которые я получаю из моих предыдущих вариантов синтаксиса.
error: no matching function for call to 'as(Rcpp::Matrix<14>::Row)'
или
error: cannot convert 'Rcpp::Matrix<14>::Row {aka Rcpp::MatrixRow<14>}' to 'double' in assignment
Ваш вопрос немного неясен для меня. Может показывать пример объектов R для вашего ввода (соответствующий 'my_list') и желаемый результат? – nrussell
Итак, вы пытаетесь написать операцию, которая создает 'l2' в вашем другом вопросе, используя Rcpp? – nrussell
@nrussell точно –