问题标签 [rcpparmadillo]

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 回答
255 浏览

r - 优化 for 循环 RcppArmadillo 中的矩阵乘法

目的是在 R 中实现正交投影非负矩阵分解 (opnmf) 的快速版本。我正在翻译此处提供的 matlab 代码。

我实现了一个香草 R 版本,但它比我的数据(~225000 x 150)的 20 因子解决方案的 matlab 实现慢得多(慢约 5.5 倍)。

所以我认为使用 c++ 可能会加快速度,但它的速度与 R 相似。我认为这可以优化但不知道如何作为 c++ 的新手。是一个讨论类似问题的线程。

这是我的 RcppArmadillo 实现。

这个建议的问题证实了matlab相当快,那么使用R/c++时没有希望了吗?

测试是在 Windows 10 和 Ubuntu 16 以及 R 版本 4.0.0 上进行的。

编辑

在下面的答案中有趣的评论之后。我正在发布其他详细信息。我在带有 R 3.5.3(微软提供的)的 Windows 10 机器上进行了测试,比较表明带有微软 R 的 RcppArmadillo 是最快的。

R

R 与 RcppArmadillo

微软的开放 R

微软与 RcppArmadillo 合作

0 投票
1 回答
96 浏览

r - RCPP Armadillo:在函数中打印整数值

CPP 和 RCPP 的新手

我正在将一个 R 包与 RCPP 放在一起。

这是我的步骤:

  1. 转移到带有包的目录。
  2. 运行 compileAttributes(pkgdir = ".",verbose=TRUE)
  3. 然后从 devtools 运行构建和安装。

我希望我的 CPP 函数之一在调用时打印一条消息。所以我补充说:

然后我完成了上面的步骤 1 到 3。但是没有雪茄。连小雪茄都没有。

理想情况下,我希望它打印出一个整数值 i,类似于

示例代码。

到目前为止,它编译并且函数运行 - 但没有打印出亲爱的变量。帮助!下面是我的功能示例。我怀疑有一些标准方法可以将值传递给 R 或简单地从 CPP 打印。

0 投票
1 回答
69 浏览

r - 尝试依赖 RcppAmadillo 时出现未定义符号错误

我试图在我的包中依赖,但是当我尝试在我的包目录中运行命令时RcppArmadillo出现错误。但是,在交互式 R 会话中按照https://stackoverflow.com/a/14165455上的说明可以正常工作。我也在我的包目录中运行了它,它似乎生成了正确的。我究竟做错了什么?unable to load shared object /tmp/Rtmp0LswYZ/Rinst82cbed4eaee/00LOCK-alt.raster/00new/alt.raster/libs/alt.raster.so: undefined symbol: dsyev_R CMD build .R -e 'Rcpp::compileAttributes()'RcppExports.cpp

0 投票
1 回答
85 浏览

c++ - 在 Rcpp 中使用 OptimLib 时出错

在 Rcpp 中使用 OptimLib 库时遇到错误。首先我sphere_fn在线复制了函数,以便以后在 optim 函数中使用它。然而,这shere_fn并没有奏效。

似乎问题出在 grad_out,但优化功能需要这种输入形式。

例如,使用以下命令调用 optim 算法:

谁能帮我解决这个问题?

我的代码是:

0 投票
1 回答
245 浏览

r - 使用 RcppArmadillo 对矩阵进行非连续子集化

您好,很抱歉这个可能很愚蠢的问题。我过去学过一点 C++,但在过去几年里我只使用过 R。我需要为我使用 Rcpp 编写的包转换一些 R 代码,特别是,我正在使用 RcppArmadillo。现在我检查了文档,但我花了最后几个小时试图完成这项工作。假设我有一个矩阵 A 和一个索引向量 idx。如果我想提取一个仅包含与 idx 中包含的索引相对应的行的子矩阵,在 R 中我会这样做:

在犰狳时,我正在这样做:

其中 A 是一个mat对象。但是,我收到以下错误: not matching function for call to 'arma::Mat<double>::rows(arma::vec&)' 我做错了什么?在此先感谢您的帮助!

0 投票
0 回答
101 浏览

r - .Call(tXPMCpp, x) 中的错误:第一个参数必须是字符串(长度为 1)或本机符号引用

我一直在关注 R 代码

并遵循 RCPP 代码

当我通过传递数据矩阵调用此函数时,它显示以下错误:

  1. .Call(tXPMCpp, x) 中的错误:第一个参数必须是字符串(长度为 1)或本机符号引用

我怎样才能调用这个函数?

0 投票
0 回答
30 浏览

profiling - _Rf_cons 和 _Rf_allocVector3 是什么?

我正在开发一个使用 Rcpp 和 RcppArmadillo 的 R 包,并且我正在尝试分析包中的一个主要功能以改进其运行时。

我正在使用Dirk 推荐的gperftools,具体如本文所述。前两个函数调用(按分析样本的数量)被调用_Rf_cons_Rf_allocVector3

有谁知道这些函数是什么,以及在 Rcpp 代码中可以从哪里调用它们?我无法通过谷歌或在 Rcpp GitHub 存储库中找到对它们的任何引用。

谢谢!

0 投票
0 回答
123 浏览

c++ - 在 Mac OS X Catalina 上编译 R 4.0 中的 C++ 代码时出错

我正在尝试在 R 中编译 C++ 代码,以便可以从源代码安装包。我在 Mac OS X Catalina (10.15.6) 上运行 R 4.0.2。我已按照此处Rcpp的说明在 Mac OS 上安装 R 编译器工具。但是,按照说明操作时,尝试在 R 中编译以下 C++ 代码(另存为 )时收到错误消息/Users/itpetersen/Desktop/helloworld.cpp

这是我尝试在 R 中编译上述 C++ 代码时收到的错误:

尝试从源代码编译包时,我也收到错误mirt消息:

这是我所做的:

  • 我在以下位置删除了文件:~/.R/Makevars
  • 我在以下位置删除了文件:~/.Renviron
  • 我安装了Xcode11.6 版
  • 我通过输入终端验证了Xcode安装。gcc --version这是输出:
  • 我从这里gfortran安装了8.2 版
  • 我在 R 中安装了RcppRcppArmadillo
  • 我还尝试将文件夹中的内容复制到include文件RcppArmadillo夹中的include文件Rcpp夹中(如此处所建议),但尝试编译 C++ 代码时继续收到错误(尽管是不同的错误)
  • 我也在这里尝试了 StackOverflow 上类似问题的解决方案,但他们没有解决问题。请注意,我使用的 R 版本比其他问题更新,因此我的问题不应被视为重复问题。

这是我的会话信息:

0 投票
0 回答
70 浏览

c++ - 如何在 C++ 中从 R 包调用 R 函数、存储结果并在 C++ 中使用它以进行进一步处理

我想从 C++ 内部加载 R 中的 rpart 包,使用 rpart 包中的 rpart() 函数从 C++ 内部拟合 CART 模型,在 C++ 中调用结果,并将其存储以供进一步处理。我尝试过的代码如下所示。我对 Rcpp 和 cpp 非常陌生,希望能对我做错的事情有所帮助。

0 投票
1 回答
43 浏览

r - RcppArmadillo 函数 cpu 时间似乎不会通过增加数据维度和数据大小来线性扩展

我在 R 和 Rcpp 中都编写了一个函数,它基本上只接受数据集 x、尺度参数 gamma 和向量参数 beta,因此返回拟合概率。以下是我在 R 中的代码:

在 Rcpp 中:

测试数据 x 是使用 rmvnorm() 从多正态分布生成的。在低维度(10 列)和小数据大小(1000 行)中,Rcpp 代码比 R 代码效果更好

但是如果我将大小增加到 100000(维度仍然是 10),则 Rcpp 代码会比 R 慢:

此外,如果我将维度增加到 100 并且大小保持为 1000,则 Rcpp 函数的性能不如低维度:

当尺寸和大小增加时,看起来 Rcpp 函数的 cpu 时间比 R 扩展得更快。我是 Rcpp 的新手,我只是直接将我的 R 代码翻译成 Rcpp。我不确定我是否做了一些愚蠢的事情,我也不知道为什么会这样。我能做些什么来解决这个问题吗?