问题标签 [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.
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 合作
r - RCPP Armadillo:在函数中打印整数值
CPP 和 RCPP 的新手
我正在将一个 R 包与 RCPP 放在一起。
这是我的步骤:
- 转移到带有包的目录。
- 运行 compileAttributes(pkgdir = ".",verbose=TRUE)
- 然后从 devtools 运行构建和安装。
我希望我的 CPP 函数之一在调用时打印一条消息。所以我补充说:
然后我完成了上面的步骤 1 到 3。但是没有雪茄。连小雪茄都没有。
理想情况下,我希望它打印出一个整数值 i,类似于
示例代码。
到目前为止,它编译并且函数运行 - 但没有打印出亲爱的变量。帮助!下面是我的功能示例。我怀疑有一些标准方法可以将值传递给 R 或简单地从 CPP 打印。
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
c++ - 在 Rcpp 中使用 OptimLib 时出错
在 Rcpp 中使用 OptimLib 库时遇到错误。首先我sphere_fn
在线复制了函数,以便以后在 optim 函数中使用它。然而,这shere_fn
并没有奏效。
似乎问题出在 grad_out,但优化功能需要这种输入形式。
例如,使用以下命令调用 optim 算法:
谁能帮我解决这个问题?
我的代码是:
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&)'
我做错了什么?在此先感谢您的帮助!
r - .Call(tXPMCpp, x) 中的错误:第一个参数必须是字符串(长度为 1)或本机符号引用
我一直在关注 R 代码
并遵循 RCPP 代码
当我通过传递数据矩阵调用此函数时,它显示以下错误:
- .Call(tXPMCpp, x) 中的错误:第一个参数必须是字符串(长度为 1)或本机符号引用
我怎样才能调用这个函数?
profiling - _Rf_cons 和 _Rf_allocVector3 是什么?
我正在开发一个使用 Rcpp 和 RcppArmadillo 的 R 包,并且我正在尝试分析包中的一个主要功能以改进其运行时。
我正在使用Dirk 推荐的gperftools,具体如本文所述。前两个函数调用(按分析样本的数量)被调用_Rf_cons
和_Rf_allocVector3
。
有谁知道这些函数是什么,以及在 Rcpp 代码中可以从哪里调用它们?我无法通过谷歌或在 Rcpp GitHub 存储库中找到对它们的任何引用。
谢谢!
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
- 我安装了
Xcode
11.6 版 - 我通过输入终端验证了
Xcode
安装。gcc --version
这是输出:
- 我从这里
gfortran
安装了8.2 版 - 我在 R 中安装了
Rcpp
和RcppArmadillo
包 - 我还尝试将文件夹中的内容复制到
include
文件RcppArmadillo
夹中的include
文件Rcpp
夹中(如此处所建议),但在尝试编译 C++ 代码时继续收到错误(尽管是不同的错误) - 我也在这里尝试了 StackOverflow 上类似问题的解决方案,但他们没有解决问题。请注意,我使用的 R 版本比其他问题更新,因此我的问题不应被视为重复问题。
这是我的会话信息:
c++ - 如何在 C++ 中从 R 包调用 R 函数、存储结果并在 C++ 中使用它以进行进一步处理
我想从 C++ 内部加载 R 中的 rpart 包,使用 rpart 包中的 rpart() 函数从 C++ 内部拟合 CART 模型,在 C++ 中调用结果,并将其存储以供进一步处理。我尝试过的代码如下所示。我对 Rcpp 和 cpp 非常陌生,希望能对我做错的事情有所帮助。
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。我不确定我是否做了一些愚蠢的事情,我也不知道为什么会这样。我能做些什么来解决这个问题吗?