问题标签 [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.
c++ - 如何使用 Rcpp 使执行就地操作的 C++ 函数可用于另一个 R 包?
假设我有一个名为“packA”的 R 包,其中包含以下文件“funcA.cpp”:
从 R 调用此函数会产生将 1 原地添加到向量的每个元素的预期结果:
现在说我有第二个包“packB”,它想调用函数“funcA”。它包含以下名为“funcB.cpp”的文件:
调用此函数不再产生所需的结果,因为看起来向量 x 不再就地修改:
有没有办法在仍然使用 Rcpp 的同时保留 C++ 函数的就地操作?提前感谢您的任何建议。
编辑: 我根据 Dirk Eddelbüttel 的建议修改了“funcB.cpp”:
不幸的是,从 R 调用函数时的结果是相同的:
编辑 2:
经过一些进一步的实验,我注意到事情一旦arma::vec& x
出现在funcA
. 只需使用NumericVector
作品:
“funcA.cpp”
“funcB.cpp”
即使使用高级arma::vec
构造函数来创建具有共享内存的犰狳向量,只要输入是 aNumericVector
:
“funcA.cpp”
尝试相同的事情arma::vec
不再有效。
“funcA.cpp”
“funcB.cpp”
c++ - 如何将犰狳矩阵与从 qnorm() 获得的 NumericVector 相乘?
当我尝试使用 operator* 在 Rcpp 中将 arma::mat 和 NumericVector 相乘时,出现以下错误:
这是我要乘以的示例:
我曾尝试查看优秀的Armadillo 文档,我能找到的最接近解决方案的是 prod() 函数,但这并没有纠正我的问题。我也尝试过重载 operator*。然而,这也没有成功。
更新:可重现的示例
loops - RcppArmadillo:for循环中的负索引
for()
我是 Rcpp 的新手,我正在尝试使用 RcppArmadillo在循环中基于负索引执行计算。我已经发现 RcppArmadillo 中的负索引并不是那么简单,但是可以通过应该保留的元素向量来完成(正如我在此处找到的那样)。当要删除的元素是循环索引时,这对我来说似乎有点困难。我试图在这个答案中实施最后一种方法,但没有成功。有没有一种简单的方法来指定元素的向量,不包括具有循环索引的元素?
因此,我试图y[-i]
在以下 MWE 中找到 RcppArmadillo 中的等价物:
到目前为止我的代码 Rcpp 代码:
任何帮助是极大的赞赏!
r - RcppArmadillo:C 函数 'SEXPREC* sourceCpp_1_hh(SEXP, SEXP, SEXP)' 的声明冲突
我的代码如下
报错:
你对这个问题有什么想法吗?
先感谢您!
r - 错误“***未在此范围内声明”
在这篇文章中,我定义了一个名为soft的函数。当我使用sourceCpp编译它时,报告的错误是
- ZH 未在此范围内声明
- alpha0H 未在此范围内声明
- maxRankH 未在此范围内声明
我尝试了很多方法来解决“......未在此范围内声明”的问题。但是,我没有找到正确的方法或错误发生的原因。我猜它应该与函数中的if-else语句有关,但不确定。
你有什么好主意来解决这个问题吗?先感谢您!
顺便说一句,我之前没有在参数中写Rcpp::NullableRcpp::LogicalMatrix Ome_ = R_NilValue, Rcpp::NullableRcpp::LogicalMatrix Ome1_ = R_NilValue, Rcpp::NullableRcpp::LogicalMatrix Ome2_ = R_NilValue,而是Rcpp:: LogicalMatrix Ome,Rcpp::LogicalMatrix Ome1,Rcpp::LogicalMatrix Ome2。但是报告了一个错误"default missing for ...arguments...",所以我改为Rcpp::NullableRcpp::LogicalMatrix ....
r - Rcpp(具有默认空参数的函数):与请求的类型不兼容:[type=NULL; 目标=双]
这里显示了我的 Rcpp 代码,我使用 sourceCpp 编译了 cpp 文件。没有报告错误,只有一些警告。当我尝试使用softImpute(m1, NULL, mr1, mr2, 0, -1)实现函数softImpute时,报告的错误是Not compatible with requested type: [type=NULL; 目标=双]。
注:m1为数值矩阵,mr1和mr2为两个逻辑矩阵。例如,我们可以生成 m1、mr1、mr2,如下所示:
你有什么想法来解决这个错误吗?先感谢您!
rcpp 代码:
r - 有没有办法在 RcppArmadillo `arma::solve` 中静音警告?
当 X 是单数时,以下代码会引发警告。有没有办法让它静音?
“警告:解决():系统似乎很奇异;尝试近似解决方案”
功能:
谢谢
r - 从 18.04 升级后,由于 Ubuntu 20.04 上的 LAPACK 导致的 R 包编译问题
我已将 Ubuntu 从 18.04 升级到 20.04,现在我的一些 R 包无法编译/加载。一个示例如下所示:
这dgesvx_
看起来像一个 LAPACK 问题(https://www.netlib.org/lapack/explore-html/d7/d3b/group__double_g_esolve_ga9d90ccf6e340cacd08b7bbbb502ceb21.html#ga9d90ccf6e340cacd08b7bbbb502ceb21)。
我在 Ubuntu 20.04 中安装了最新的 LAPACK 版本(3.9.0-1build1)。
我可以在这里做些什么来解决这个问题?
我的sessionInfo()
:
r - About the use of .shed_row/.shed_col in RcppArmadillo
I am now trying to convert R code to Rcpp code.
The R code is
My Rcpp code is
The error should be about the use of .shed_row/.shed_col. I have Googled .shed_row, however, did not have an idea yet to address the issue I encountered here. Do you have any idea? Thank you in advance!
Further Update:
Now we consider using .shed_row/.shed_col
in for-loop in the function.
Specifically, my Rcpp code is the following
The equivalent R code is the following
My R code works. It has been tested. However, I am having troubles with the Rcpp code.
I tried many ways and mainly encountered two errors :
- Error in ggcpp(a1, a2) : as_scalar(): incompatible dimensions
- Error in ggcpp(a1, a2) : Mat::shed_col(): index out of bounds
Here, a1
and a2
are two randomly generated 6*6 matrices.
Do you have any idea? Appreciated!!!