问题标签 [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 回答
3941 浏览

r - 在 R 2.15.0 中安装 Rcpp 包

我在 R 中安装“Rcpp”包时遇到问题。安装命令适用于所有包,但不适用于这个包。R错误是:

包“Rcpp”不可用(对于 R 版本 2.15.0)

我正在使用 Windows Vista。请帮助。

0 投票
1 回答
5341 浏览

r - Rcpp 按引用传递与按值传递

我第一次尝试通过 Rcpp 函数inline,它解决了我的速度问题(感谢 Dirk!): 用零替换负值

初始版本如下所示:

但是当被调用时cpp_if(p),它被输出覆盖p了,这不是预期的。所以我认为它是通过引用传递的。

所以我用以下版本修复了它:

这似乎奏效了。但是现在当我将原始版本重新加载到 R 中时,原始版本不再覆盖它的输入(即现在相同的确切代码不会覆盖它的输入):

我不是唯一一个试图复制这种行为并发现不一致结果的人:

https://chat.stackoverflow.com/transcript/message/4357344#4357344

这里发生了什么?

0 投票
1 回答
3740 浏览

r - Windows下Rcpp生成的DLL调试(逐行)

最近我一直在尝试使用 Rcpp(内联)来生成 DLL,这些 DLL 在提供的 R 输入上执行各种任务。给定一组特定的 R 输入,我希望能够逐行调试这些 DLL 中的代码。(我在 Windows 下工作。)

为了说明,让我们考虑一个任何人都应该能够运行的特定示例......

下面的代码是一个非常简单的 cxx 函数,它只是将输入向量加倍。但是请注意,还有一个额外的变量myvar可以更改几次值但不影响输出 - 已添加此变量,以便我们能够看到调试过程何时正确运行。

在我们运行上面之后,输入命令

在 R 会话中显示 DLL 列表。列出的最后一个应该是上述过程创建的 DLL - 它有一个随机的临时名称,在我的例子中是

“文件名”列显示 cxxfunction 已将此 DLL 放在 locationtempdir()中,对我来说目前是

现在,调用 DLL 的明显方法是 via f0,如下

但我们当然也可以使用以下.Call命令直接按名称调用 DLL:

所以我已经达到了直接使用 R 输入(这里是 vector c(-7,0.7,77))调用独立 DLL 并让它正确地将答案返回给 R的地步。

不过,我真正需要的是一个用于逐行调试的工具(我猜是使用 gdb),它可以让我观察myvar设置为 19、27、28、29、30 和最后 101 的值代码进展。上面的示例是故意设置的,因此调用 DLL 不会告诉我们有关 myvar 的任何信息。

澄清一下,这里的“获胜条件”是能够观察 myvar 的变化(看到值 myvar=19 将是第一步!)而不向代码主体添加任何其他内容。这显然可能需要更改代码的编译方式(是否有调试模式设置可以打开?),或者调用 R 的方式 - 但我不知道从哪里开始。如上所述,所有这些都是基于 Windows 的。

最后说明:在我的实验中,我实际上对 cxxfunction 的副本进行了一些小修改,以便输出 DLL - 以及其中的代码 - 接收用户定义的名称并位于用户定义的目录中,而不是临时名称和位置。但这并不影响问题的本质。我提到这一点只是为了强调如果有人轻推我,更改编译设置应该相当容易:)

为了完整起见,在上面的原始 cxxfunction 调用中设置 verbose=TRUE 显示编译参数为以下形式:

我的改编版本有一个与上面相同的编译参数,除了字符串“file7e61645c”被用户选择的名称(例如“testdll”)替换并且相关文件复制到更永久的位置。

在此先感谢您的帮助:)

0 投票
1 回答
1355 浏览

r - 如何从使用内联 C++ 过渡到制作自己的 R 包?

这里发生了两件事:(1)我只是在学习如何使用 Rcpp 和朋友让我的 R 代码更快,(2)我以前从未构建过 R 包。

我已经使用了inline下来。很棒的包裹。爱它。但是,我似乎无法使用使用inlinewith开发的任何代码package.skeleton来制作 R 包。

这是一个最小的例子:

第 1 步:制作 R 脚本

第 2 步:将其构建为 R 包

在新的 R 会话中运行:

然后删除man/*.Rd文件,因为 R 没有设置“正常工作”的默认值。

并运行:

除了一些抱怨缺少文档外,所有这些都成功完成。

第 3 步:尝试一下

然后在新的 R 会话中尝试一下:

它失败。在我未经训练的眼睛看来:

  1. 编译的代码inline从未被 *.package.skeleton 复制到目录骨架的“右侧”部分,以供 R 构建过程稍后编译,并且
  2. 如果 'code_files' 参数不会导致 R 在加载包时获取这些 *.R 文件,则失败。

进一步考虑这一点,似乎(2)将是一个非常糟糕的主意,因为它会强制用户每次加载他们的包时编译代码。这将排除所有只需要二进制包的用户,而且效率很低。

并且 (1) 在技术上似乎是可行的,但正如Rcpp 邮件列表中所讨论的那样,不值得实现一组自动魔术转换器功能。

所以,问题:

有人可以介绍一下获取提供的示例代码并将其转换为 R 包的正确方法吗?

对我来说,理解现有文档有点新鲜。FWIW,我相信这对未来的人们会有帮助!

0 投票
1 回答
163 浏览

r - R:将R与Eurequa连接,Rcpp编译错误

我正在尝试从 R 中运行 Eurequa。 http://code.google.com/p/eureqa-api/ 我正在使用下面的代码,但出现编译错误:

我会很感激你的帮助。

0 投票
2 回答
168 浏览

linux - 如何在 Rcpp 的代码中放置`library (RgoogleMaps)`?

如何放置上面
library(RgoogleMaps)

png (filename="Rg.png", width=480, height=480)
代码?

我将其运行为:R CMD SHLIB rtest.cpp

Rcpp的版本是0.9.13

我试过:
R CMD SHLIB -lRgoogleMaps rtest.cpp

结果是:

0 投票
2 回答
2289 浏览

linux - 在 Linux 上使用 g++ 编译 RInside 程序

我已经通过 RPM(使用 Yast)安装了 R。


我要编译的文件 ( rinsidetest.cpp) 包含:


这是我编译它的方法:


信息:

RInside版本:0.2.6
Rcpp版本:0.9.13

是否有解决此问题的方法,或者我“必须”删除 rpm 安装并通过从源代码编译来启动所有内容?

编辑


0 投票
1 回答
587 浏览

rcpp - rcpp 模块 c++ 对象终结器

为什么在指定对象终结器时这个 Rcpp 模块暴露的 c++ 类不能编译?你能提供一个工作版本吗?

来自 Rcpp Modules 教程:class_ 的 .finalizer 成员函数可用于注册终结器。终结器是一个自由函数,它接受一个指向目标类的指针并返回 void。终结器在析构函数之前调用,因此对目标类的有效对象进行操作。可用于执行操作、释放资源等……终结器在封装C++对象的R对象被垃圾回收时自动调用。

0 投票
1 回答
4239 浏览

r - Rcpp 条件中的 NA 值

我在 Rcpp 中遇到了条件问题。解释我的问题的最好方法是通过一个例子。

据我了解,NA_REAL表示 Rcpp 中实数的 NA 值并NA_Integer表示整数的 NA 值。我不确定为什么上述条件永远不会返回 true given z

0 投票
3 回答
1424 浏览

r - 将 Rcpp 与特定于 Windows 的包含一起使用

我正在尝试使用 Rcpp 编写一些 C++ 代码来访问 Windows 中的一些操作系统级别的东西。一旦我包含windows.hor shlobj.h,我就会得到一堆编译错误。当我运行这段代码时,它可以工作,所以我知道我掌握了一些基础知识。但是,当我取消注释任何与 Windows 相关的行时#include,它就不起作用了。

注意:当我在 RStudio 中运行它时,控制台的输出coutprintf出现在控制台中,但是当我从 Windows RGui 运行它时,输出不会出现。我认为这与 RGui 处理文本输出的方式有关。

当我取消注释这些包含行时,我得到的错误如下所示:

... 等等

关于如何使这项工作的任何提示?


更新:我设法消除了一些错误,但仍有一些错误。

Realloc通过遵循http://tolstoy.newcastle.edu.au/R/e2/devel/06/11/1242.html的一些建议,我也得到了错误

inc应替换为:

我还通过传递-fpermissive给编译器来消除其他错误,如来自这个问题:How to set g++ compiler flags using Rcpp and inline?

但是还是有一些错误: