Возможно глупый вопрос, но я охотился вокруг много для ответа и не смог найти один:прилагая к элементам внутри списка Rcpp
Я пытаюсь написать читателя файл, а-ля fread
или read.delim
, но реализован на C++ и подключен к R через Rcpp. Самый простой способ сделать это и есть она выдавала data.frame является у него производит List
векторов - один для каждого столбца - и установите класс data.frame
List foo;
foo.push_back(column);
foo.attr("class") = "data.frame";
return foo;
достаточно просто, и я сделал это до. К сожалению:
- Файл (ы), который я хочу прочитать, может иметь различное количество полей;
- Эта модель работает только элегантно, если вы читаете из столбца файла, в то время как фактические файлы, как правило, читаются по-разному.
Таким образом, ответ должен быть в состоянии определить Foo, а затем, для каждой строки я прочитал в, push_back() поле на каждой из базовых векторов Foo в:
List foo(1);
foo[0].push_back("turnip");
К сожалению, я могу не получим, как это сделать: не представляется, что векторы-члены List могут быть pushed_back(), поскольку это приводит к ошибке «Rcpp :: Vector < 19> :: Proxy не имеет имени с именем push_back() "
Итак, мой вопрос: есть ли способ добавить к вектору в списке Rcpp? Или мой единственный вариант, чтобы прочитать файл в столбце за столбцом, добавив результирующие векторы к «foo» и укусить затраты на производительность, которые могут возникнуть в результате повторения итерации через [число столбцов] раз, а не один раз?
Надеюсь, этот вопрос достаточно ясен. С удовольствием отвечаю на любые вопросы.
Это имеет смысл.Итак, чтобы подвести итог; даже если он кажется неэффективным, наиболее эффективный подход, вероятно, повторяется многократно через файл, извлекающий каждый столбец поочередно как std :: vector, а затем добавив этот вектор в список целиком? –
Во многих случаях вы можете делать чтение по-разному, увеличивая ваши структуры данных и конвертируя их в конце. Сделать это полностью _generally_ и _efficient_ сложно. –