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

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”

0 投票
1 回答
412 浏览

c++ - 如何将犰狳矩阵与从 qnorm() 获得的 NumericVector 相乘?

当我尝试使用 operator* 在 Rcpp 中将 arma::mat 和 NumericVector 相乘时,出现以下错误:

这是我要乘以的示例:

我曾尝试查看优秀的Armadillo 文档,我能找到的最接近解决方案的是 prod() 函数,但这并没有纠正我的问题。我也尝试过重载 operator*。然而,这也没有成功。

更新:可重现的示例

0 投票
1 回答
135 浏览

loops - RcppArmadillo:for循环中的负索引

for()我是 Rcpp 的新手,我正在尝试使用 RcppArmadillo在循环中基于负索引执行计算。我已经发现 RcppArmadillo 中的负索引并不是那么简单,但是可以通过应该保留的元素向量来完成(正如我在此处找到的那样)。当要删除的元素是循环索引时,这对我来说似乎有点困难。我试图在这个答案中实施最后一种方法,但没有成功。有没有一种简单的方法来指定元素的向量,不包括具有循环索引的元素?

因此,我试图y[-i]在以下 MWE 中找到 RcppArmadillo 中的等价物:

到目前为止我的代码 Rcpp 代码:

任何帮助是极大的赞赏!

0 投票
0 回答
101 浏览

rcpp - 在 RcppArmadillo 中使用 qr 分解的问题

我需要通过 Rcpp 从犰狳进行 qr 分解。以下 R 代码(带有经济 QR)确实运行:

在此处输入图像描述

相反,以下代码(非常相似,只是使用 qr 而不是 qr_econ)在编译时失败:

在此处输入图像描述

对于这种奇怪的代码行为有什么建议吗?提前谢谢了。

0 投票
1 回答
141 浏览

r - RcppArmadillo:C 函数 'SEXPREC* sourceCpp_1_hh(SEXP, SEXP, SEXP)' 的声明冲突

我的代码如下

报错:

你对这个问题有什么想法吗?

先感谢您!

0 投票
1 回答
164 浏览

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 ....

0 投票
0 回答
643 浏览

r - Rcpp(具有默认空参数的函数):与请求的类型不兼容:[type=NULL; 目标=双]

这里显示了我的 Rcpp 代码,我使用 sourceCpp 编译了 cpp 文件。没有报告错误,只有一些警告。当我尝试使用softImpute(m1, NULL, mr1, mr2, 0, -1)实现函数softImpute时,报告的错误是Not compatible with requested type: [type=NULL; 目标=双]

注:m1为数值矩阵,mr1mr2为两个逻辑矩阵。例如,我们可以生成 m1、mr1、mr2,如下所示:

你有什么想法来解决这个错误吗?先感谢您!

rcpp 代码:

0 投票
1 回答
189 浏览

r - 有没有办法在 RcppArmadillo `arma::solve` 中静音警告?

当 X 是单数时,以下代码会引发警告。有没有办法让它静音?

“警告:解决():系统似乎很奇异;尝试近似解决方案”

功能:

谢谢

0 投票
0 回答
147 浏览

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()

0 投票
2 回答
184 浏览

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 :

  1. Error in ggcpp(a1, a2) : as_scalar(): incompatible dimensions
  2. 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!!!