问题标签 [rcpp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5881 浏览

c++ - 在 R 包中使用 C++ 库

在 R 中使用 C++ 库的最佳方法是什么,希望保留 C++ 数据结构。我根本不是 C++ 用户,所以我不清楚可用方法的相对优点。R-ext 手册似乎建议将每个 C++ 函数包装在 C 中。但是,至少存在四五种其他方法来合并 C++。

两种方式是具有相似血统的包,Rcpp(由多产的溢出者 Dirk Eddelbuettel 维护)和 RcppTemplate 包(都在 CRAN 上),两者之间有什么区别?

R forge 上的另一个包 rcppbind 可用,它声称采用不同的方法来绑定 C++ 和 R(我不知道如何判断)。

CRAN 上可用的包内联,声称允许内联 C/C++ 我不确定这与内置功能不同,除了允许代码内联 w/R。

最后, RSwig似乎很流行,但目前还不清楚它的支持程度,因为作者的页面已经多年没有更新了。

我的问题是,这些不同方法的相对优点是什么。哪些是最便携和最健壮的,哪些是最容易实现的。如果你打算在 CRAN 上分发一个包,你会使用哪种方法?

0 投票
10 回答
100666 浏览

performance - 加快 R 中的循环操作

我在 R 中有一个很大的性能问题。我编写了一个迭代data.frame对象的函数。它只是向 a 添加一个新列data.frame并积累一些东西。(操作简单)。有data.frame大约 850K 行。我的电脑仍在工作(现在大约 10 小时),我不知道运行时。

任何想法如何加快此操作?

0 投票
2 回答
18975 浏览

r - 如何在 Rcpp 中创建向量列表?

我正在编写一个 Rcpp 模块,并希望将其元素为向量的列表作为 RcppResultSet 列表的一个元素返回。例如,.Call("myfunc")$foo应该是这样的:

(确切的数字在这里并不重要)。问题是我不知道这样做的正确 Rcpp 方式。我尝试传递 a vector<vector<int> >,但这通过默默地将第一个向量的长度作为宽度来构造一个矩阵(即使矩阵是参差不齐的!)。我尝试构建一个RcppList但很难将各种对象(如RcppVector)安全地转换为SEXPs。

有人对处理复杂结构(例如 Rcpp 中的向量列表)的最佳实践有提示吗?

0 投票
1 回答
1062 浏览

c++ - 如何让 Rcpp 找到一个新的模块?

在我成功编译了一个新的 Rcpp 模块之后(示例来自“使用 Rcpp 模块公开 C++ 函数和类,Dirk Eddelbuettel Romain Francois”)

按照论文中的说明,

R 抱怨错误:

我尝试在调用''Module(“yada”)''之前放置''dyn.load(“/path/to/yada.dll”)'',仍然是同样的错误。

网上关于 Rcpp 模块的信息很少。有没有人知道如何解决这个问题?我应该将编译的模块 dll 放在某个特定的文件夹中吗?

示例代码:

0 投票
1 回答
1484 浏览

r - 使用内联 Rcpp 从全局环境中读取变量?

我正在遵循 Rcpp intro Vignette 中的示例,并尝试使用内联。

但我得到一个编译错误。

出了什么问题,有没有办法解决这个问题?这只是玩具示例,根据对此的答案,我有一个更重要的复杂问题。

0 投票
1 回答
588 浏览

gcc - 使用 R 内联链接到另一个包

我有一个 C++/Rcpp 函数,我需要编译并链接到 pomp 包以访问随机数生成器。我可以获取包含的头文件,但是如何让它链接到已编译的代码?

该代码使用 pomp 包中的 reulermultinom 函数,当我评估它时,它给出了错误

对 `reulermultinom(int, double, double*, double, double*) 的未定义引用

发出的命令是

g++ -I"C:/PROGRA~1/R/R-211~1.1/include" -I"C:/PROGRA~1/R/R-211~1.1/library/Rcpp/include" -O2 -Wall - c file2f752742.cpp -o file2f752742.o g++ -shared -s -static-libgcc -o file2f752742.dll tmp.def file2f752742.o C:/PROGRA~1/R/R-211~1.1/library/Rcpp/lib/ libRcpp.a -LC:/PROGRA~1/R/R-211~1.1/bin -lR

似乎应该有一个 -lpomp 或类似的东西。

0 投票
4 回答
9683 浏览

r - 我在哪里可以学习如何编写 C 代码来加速慢速 R 函数?

学习如何编写用于 R 的 C 代码的最佳资源是什么?我知道 R 扩展的系统和外语接口部分,但我觉得很难。用于编写与 R 一起使用的 C 代码的好资源(在线和离线)是什么?

澄清一下,我不想学习如何编写 C 代码,我想学习如何更好地集成 R 和 C。例如,如何从 C 整数向量转换为 R 整数向量(反之亦然)还是从 C 标量到 R 向量?

0 投票
4 回答
855 浏览

c++ - 集成了 C++ 代码的包开发的 IDE / 设置

我正在尝试将 C++/Rcpp 作为 R 的扩展来处理繁重的计算任务。最终,这些 C++ 库应该集成在一个包中,因此我正在寻找一种我需要轻松工作的工具/IDE 的设置/组合。我知道很大程度上取决于口味,但在选择之前了解我的选择仍然会很好。

所以:当您使用 C++ 库开发 R 包时,您使用的设置是什么?

  • 您是否对 R 和 C++ 使用相同的编辑器/IDE 以及哪个(或哪些)?
  • 是否有重要的额外工具(Rtools 除外)?
  • 总体设置中是否有重要的调整对于了解或显着加快该过程很重要?

对不起,如果这个问题以前被问过。我找到了所有 R 编辑器的列表,但没有专门针对开发包(包括 C++ 代码)的内容。非常感谢任何提示或提示。

编辑:平台是 Windows,但我可以毫无问题地迁移到 Linux(双启动,唯一让我无法使用 ubuntu 的是我的旧卡/旧屏幕组合缺少合适的驱动程序)

0 投票
3 回答
3317 浏览

c++ - 在 UNIX 中使用 g++ 编译器从 C++ 代码链接到 R 和 RInside 库时出现未定义的引用错误

我想将 R 嵌入到 C++ 程序中。所以我也安装了 R、Rcpp 和 RInside。但是在 UNIX 中使用 g++ 编译时出现很多“未定义的引用”错误。我给出的编译命令是

g++ -I/path/to/R/include -I/path/to/Rcpp/include -I/path/to/RInside/include -L/path/to/R/libs -L/path/to/Rcpp/ libs -L/path/to/RInside/libs test.cpp -lRlapack -lRcpp -lRblas -lRInside"

测试.cpp:

错误:

我收到与 R 变量类似的 110 个未定义错误。我已将 R 和其他软件包安装到我自己的位置而不是默认位置。我现在被这个错误困住了 2 天。我似乎做的一切都是正确的,比如链接等。在此先感谢。

0 投票
2 回答
1623 浏览

r - 使用 Rcpp 在 R 上的柠檬图库

我认为这个答案有点复杂,因为它涉及到几件事。

我想用 R 进行高性能计算,尤其是图形(网络)。作为 R 包igraph非常好。但是 R 很慢,所以我想用 C++(可能是 C)编写计算量大的例程。我看了一下igraph C 库,发现使用起来有点乱。我还查看了Boost Graph Library,我读到它很难学习。所以我最终找到了Lemon Graph Library。它在 C++ 中,看起来非常好用。

所以我按照官方页面的推荐安装了Lemon Graph Library。然后使用Rcpp内联包,我管理自己从 R 运行 Lemon Graph C++ 代码。在这里,我详细写下我所做的。但基本上我把这个:

在 myexample_inline.R 文件中,然后运行 ​​R 控制台并写入:

所以它有效!但现在我有以下问题。如果我创建一个 C++ 函数(比如 double func1(g)),例如计算某个 Lemon 图形对象的某些属性。我如何从内联代码中调用该函数?我必须将 func1() 作为模板函数并将其放在 cxxfunction() 的包含字段中吗?

基本上:我不知道如何从另一个也在 R 中内联的 C++ 函数调用在 R 中内联的 C++ 函数。这可能吗?还有另一种不使用内联代码的方法吗?

也许我可以使用Rcpp 模块来做到这一点,但我无法(仍然)弄清楚如何做到这一点。我在使模块工作时遇到问题。我会继续尝试这个,但也许我可以从这里得到一些提示。

我还考虑过开发(我的第一个)包的可能性。但是我遇到了 Lemon Graph C++ 代码以这种方式调用标题的问题(例如):

所以这意味着(至少我相信这一点)我无法避免安装 Lemon Graph Library。如果我想制作 Lemon Graph Library 的 R 包,我必须再次“重写”所有代码!!!所以这不是我的主要选择。

此致