问题标签 [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 投票
2 回答
398 浏览

performance - R中数据的快速边界

假设我有一个向量 ,vec它很长(从 1E8 个条目开始)并且想将它绑定到范围[a,b]。我当然可以编码vec[vec < a] = aand vec[vec > b] = b,但这需要两次传递数据并为临时指标向量分配大量 RAM(~800MB,两次)。两者都通过了刻录时间,因为如果我们只将数据从主内存复制到本地缓存一次,我们可以做得更好(对主内存的调用很糟糕,缓存未命中也是如此)。谁知道多线程可以改善多少,但我们不要贪心。:)

在基本 R 或我忽略的某个包中是否有一个很好的实现,或者这是 Rcpp (或我的老朋友data.table)的工作?

0 投票
2 回答
1669 浏览

c++ - 在 windows 下构建(并运行)RInside 示例

我对 RInside + Rcpp + R + C++ + windows 的故事很陌生。我试图通过成功编译和运行 RInside 示例来让事情顺利进行。我设法克服了许多最初的问题(比如这个),最后设法构建了 64 位 RInside 示例可执行文件。

我正在运行最新版本的 R 和最新版本的 RTools。我通过运行从源代码构建了 RInside 和 RCPP

否则我只能构建 x86 二进制文件(我无法在我的 64 位 Windows 服务器操作系统上运行)。从 R 控制台一切正常。以下示例通过,没有任何错误:

但是当我尝试运行 RInside 示例时,我收到以下错误:

有谁知道发生了什么?

提前非常感谢。

编辑:更详细的 R 2.15.0 问题重现。

我将 CRAN 的最新版本安装到 C:\R-2.15.0 Ran 64bit RGUI.exe 并执行install.packages(c("Rcpp","RInside"),type="source") Changed Makefile.win 以强制 x64 架构并指向正确的安装目录。

跑 make -f Makefile.win

我得到了可执行文件,但是当我尝试运行其中任何一个时,都会出现以下错误。

0 投票
1 回答
780 浏览

c++ - 使用 rcpp/rinside 包时如何在 makefile 中包含 dll 库

我将 R 与 Rinside/Rcpp 包一起使用。我能够从基于 Rinside 包编写的 C++ 代码生成 .exe/.o/.dll 文件 (A)。

但是,后来我发现我想使用 A.dll 作为我其他功能的库。但我想不出办法做到这一点。有什么提示吗?或者我可以参考的任何文档?

谢谢

0 投票
1 回答
1571 浏览

c++ - Rcpp:比较从 R 数据帧派生的字符串的巧妙方法?

在 Rcpp 处理字符串时有些头疼,查看了“如何测试 Rcpp::CharacterVector 元素是否相等”,但情况比这要复杂一些。

为了说明,假设我们有一个 200 行的名称和标记数据框,随机生成:

我发现以下内联代码(使用 Rcpp)正确计算出所有行的标记总和,其中命名的人是数据框中给出的第一人(即 R 中的 df$name[1],或等效名称[0] 在 Rcpp 代码中):

现在,我真的想尽可能地简化这一点,因为必须定义一个单独的变量来表示 name[] 中的值,强制转换为 std::string,然后进行比较,这很麻烦。必须有某种方法来简化符号,使其看起来更像以下内容(应该注意它不起作用!)...

这个迷你学习项目的最终目标是让我弄清楚如何遍历 df$name 中的唯一名称,计算每个名称的标记总和,并将所有内容(唯一名称和相应的总和)作为一个整洁的数据框返回. 我已经从其他示例中弄清楚了如何构建和返回最终数据框的大部分细节——只是上面描述的字符串让我头疼。非常感谢您的任何指点!

0 投票
1 回答
1777 浏览

c++ - Rcpp:将数据帧与 Rcpp(内联)一起使用时推荐的代码结构

[我在别处草拟了这个作为评论,但决定提出一个适当的问题......]

在 Rcpp 中使用数据帧时,就代码结构而言,目前认为什么是“最佳实践”?人们可以轻松地将输入数据帧从 R 传送到 C++ 代码,但如果数据帧有 n 列,则当前认为应该将这些数据拆分为 n 个单独的 (C++) 向量在被使用之前?

对我之前关于在数据框中使用字符串(字符向量)列的问题的回答向我表明,是的,这是正确的做法。特别是,似乎不支持诸如 df.name[i] 之类的符号直接引用数据帧信息(就像在 C 结构中可能具有的那样),除非我弄错了。

然而,这导致我们陷入一种情况,即对数据进行子集化要麻烦得多——不能在一行中对数据框进行子集化,而是必须单独处理每个变量。那么,是否认为 Rcpp 中的子集化最好通过布尔向量隐式完成?

总而言之,我想简而言之,我想检查一下我目前的理解,尽管数据框可以传送到 C++ 代码,但无法直接引用“df.name [ i]" 时尚,并且没有简单的方法通过选择满足简单标准的行来生成输入 df 的子数据帧(例如 df.date 在给定范围内)。

0 投票
2 回答
670 浏览

java - C++ 或 Java 调用 R 脚本的 RCPP 或 RCaller 的基准测试?

我对这个答案的看法高低不一,所以我求助于在这里发帖。如果我有一个 Linux C++ 程序调用一个带有 RCpp 之类的 R 脚本/函数,是否会有任何明显的延迟?这是可以预料的,甚至听起来合理吗?如果我使用 Java JAR 文件中的 RCaller 之类的东西怎么办?如果调用相同的 R 脚本/函数,您认为 C++ 仍然比 Java 快吗?任何预期的差异?谢谢

0 投票
1 回答
1360 浏览

r - RcppArmadillo中的QR分解

真的很困惑为什么使用 RcppArmadillo 的 QR 输出与 R 的 QR 输出不同;犰狳文档也没有给出明确的答案。本质上,当我给 R 一个矩阵 Y 是 n * q (比如 1000 X 20 ) 时,我会得到 Q ,它是 1000 X 20 和 R 20 X 1000。这就是我需要的。但是当我在犰狳中使用 QR 求解器时,它让我返回 Q 1000 X 1000 和 R 1000 X 20。我可以调用 R 的 qr 函数吗?我需要 Q 有维度 nxq,而不是 qx q。下面的代码是我正在使用的(它是更大功能的一部分)。

如果有人可以建议如何在 RcppEigen 中执行此操作,那也会很有帮助。

0 投票
0 回答
292 浏览

r - package.skeleton cxxfunction 和 R 函数

我阅读了 Rcpp 常见问题,发现了如何使用我的内联原型构建一个函数,例如

制造

它运行良好,但是,当我尝试将普通 R 函数与 cxxfunctions 混合时,它不起作用。有什么猜测吗?至少有一种方法可以将代码添加到现有骨架?

0 投票
1 回答
1310 浏览

r - Rcpp 中的高效子集(相当于 R“which”命令)

在 Rcpp 中,有各种“Rcpp 糖”命令允许在代码中进行很好的矢量化操作。在下面的代码中,我移动了一个数据框,将其分解为向量,然后使用“ifelse”和“sum”糖命令计算 v 在 x 等于 y 或 y+1 的行上的平均值。一切似乎都正常工作。

只是想知道是否有比这更简洁的方法 - 例如,等效于“which”命令,它给出满足特定条件的索引点?在犰狳中似乎有一个可用作“find”的工具,但这意味着使用不兼容的对象类型(你不能同时使用“find”和“ifelse”)。

在同一主题上,是否可以让“ifelse”接受复合逻辑条件?例如,在下面的例子中,indic 的定义是由两个“ifelse”命令组成的,显然它是一个更简洁的命令。任何想法将不胜感激。

期待听到您的回复:)

0 投票
4 回答
79706 浏览

r - 用零替换负值

我们想将数组零中的所有值设置为负数。

我尝试了很多东西,但还没有找到可行的解决方案。我考虑了一个带有条件的 for 循环,但这似乎不起作用。