【发布时间】:2014-12-20 23:18:01
【问题描述】:
可能是一个愚蠢的问题,但我已经四处寻找答案但找不到答案:
我正在尝试编写一个文件阅读器,例如 fread 或 read.delim,但用 C++ 实现并通过 Rcpp 连接到 R。做到这一点并让它输出一个 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 的成员向量 push_back() 到,因为这会导致错误“Rcpp::Vector::Proxy has没有名为 push_back() 的成员”
所以,我的问题是:有什么方法可以附加到 Rcpp 列表中的向量?还是我唯一的选择是逐列读取文件,将结果向量附加到“foo”,并降低由于必须迭代它[列数]次而不是一次而导致的性能成本?
希望这个问题足够清楚。很乐意回答任何问题。
【问题讨论】: