将数据集从 R 传递到C++(使用 .呼叫)
Passing dataset from R to C++ (using .Call)
我需要加快 R 到 C++ 中的数据处理速度。我已经有了我的C++代码,它基本上从 txt 文件中读取 R 应该传递的内容。由于我需要 R 进行分析,因此我想将我的C++代码集成到 R 中。
C++代码需要的是一个(大(数据帧(我使用 std::vector<std::vector>>(和一组参数,所以我正在考虑通过 .调用接口,然后按以下方式处理数据:
-
R:使用给定编码将数据写入 txt 文件
-
C++:从 txt 读取,做我需要做的事情并将结果写入 txt(它仍然是一个数据集 -> std::vector(
-
R:从 txt 读取结果
这将避免我重写部分代码。可能的问题/瓶颈在于阅读/写作,您认为这是一个真正的问题吗?
否则,作为替代方案,通过 C++结构复制我的所有数据是否合理。呼叫接口?
谢谢。
您可以从 RcppExample 包中非常简单的数据帧示例开始:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
List DataFrameExample(const DataFrame & DF) {
// access each column by name
IntegerVector a = DF["a"];
CharacterVector b = DF["b"];
DateVector c = DF["c"];
// do something
a[2] = 42;
b[1] = "foo";
c[0] = c[0] + 7; // move up a week
// create a new data frame
DataFrame NDF = DataFrame::create(Named("a")=a,
Named("b")=b,
Named("c")=c);
// and return old and new in list
return List::create(Named("origDataFrame") = DF,
Named("newDataFrame") = NDF);
}
您可以分配向量(来自 Rcpp 或 STL(和矩阵(同样,来自 Rcpp,或者如果您更喜欢嵌套的 STL 向量(。 然后你还有通过RcppEigen和RcppArmadillo的特征和犰狳。 等等 - CRAN上有超过1350个软件包,你可以学习。 Rcpp 画廊中提供了大量现成的示例。
来回读取和写入大型数据集不是在 R 和C++代码之间传递数据的最佳解决方案。根据C++代码执行的时间长短,这可能是也可能不是代码中最严重的瓶颈,但应避免使用此方法。
您可以查看以下解决方案来传递 data.frame(或 data.table(对象: 使用"Rcpp"和/或"RcppArmadillo"将"data.table"传递给c ++函数
至于传递其他参数,解决方案将取决于我们正在谈论的参数类型。如果这些只是数值,则可以将它们直接传递给C++(请参阅Rcpp 的高性能函数:http://adv-r.had.co.nz/Rcpp.html(。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 使用std::multimap迭代器创建std::list
- 从不同线程使用int64的不同字节安全吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 为什么使用 "this" 指针调用派生成员函数?
- 使用新行和不使用新行读取文件
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何确定我已使用非编码文件到达 EOF?
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 使用CMake创建QML插件
- 使用strcpy将char数组的元素复制到另一个数组
- 在c++中使用nlohmann从类到json的转换
- 使用指针从C++中的数组中获取最大值
- 使用不带参数的函数访问结构元素