首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据集从R传递到C++ (使用.Call)

问将数据集从R传递到C++ (使用.Call)
EN

Stack Overflow用户
提问于 2018-05-04 09:46:09
回答 2查看 763关注 0票数 0

我需要通过C++加速R中的数据处理。我已经有了我的C++代码,它基本上从txt文件读取R应该传递的内容。因为我需要R来进行分析,所以我想在R中集成我的C++代码。

C++代码需要的是(大型)数据(我使用std::vector< std::vector> >)和一组参数,因此我考虑通过.Call接口传递参数,然后以以下方式处理数据:

  • R:用给定的编码在txt文件中写入数据
  • C++:从txt读取,做我需要做的事情,并在txt中写入结果(仍然是数据集-> std::->)
  • R:阅读txt的结果。

这将避免我重写部分代码。可能的问题/瓶颈是在阅读/写作,你认为这是一个真正的问题吗?

否则,作为一种选择,通过C++接口复制.Call结构中的所有数据是否合理?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-05-05 00:43:43

您可以从RcppExamples包中非常简单的RcppExamples示例开始:

代码语言:javascript
复制
#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得到艾根和阿尔马迪洛。有超过1350个包裹你可以学习。在Rcpp画廊上有大量的准备运行的例子。

票数 1
EN

Stack Overflow用户

发布于 2018-05-05 00:15:23

来回读写大型数据集并不是在R和C++代码之间传递数据的最佳解决方案。根据C++代码执行的时间长短,这可能是代码中最糟糕的瓶颈,也可能不是最糟糕的瓶颈,但是应该避免这种方法。

您可以查看下面的解决方案来传递data.frame (或data.table)对象:RcppArmadillo

至于传递附加参数,则取决于我们所讨论的参数类型。如果这些只是数值,那么您可以直接将它们传递给C++ (参见高性能函数与Rcpp:http://adv-r.had.co.nz/Rcpp.html)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50171991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档