RCPP Armadillo:在函数中打印整数值
Posted
技术标签:
【中文标题】RCPP Armadillo:在函数中打印整数值【英文标题】:RCPP Armadillo: Print integer value in function 【发布时间】:2020-07-10 01:42:05 【问题描述】:CPP 和 RCPP 新手
我正在将一个 R 包与 RCPP 放在一起。
这是我的步骤:
-
转移到包含包的目录。
运行 compileAttributes(pkgdir = ".",verbose=TRUE)
然后从 devtools 运行构建和安装。
我希望我的 CPP 函数之一在调用时打印一条消息。 所以我补充说:
Rcpp::Rcout << "Hello World!" << std::endl;
然后我完成了上面的步骤 1 到 3。但是没有雪茄。连小雪茄都没有。
理想情况下,我希望它打印出一个整数值 i,类似于
示例代码。
Rcpp::Rcout << i << std::endl;
到目前为止,它已经编译并且函数运行了——但没有打印出亲爱的变量。帮助!下面是我的功能示例。我怀疑有一些标准方法可以将值传递给 R 或简单地从 CPP 打印。
# include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::plugins(cpp11)]]
using namespace Rcpp ;
arma::mat sillyme (arma::mat FE)
arma::mat FEE = FE ;
Rcpp::Rcout << "Hello World!" << std::endl;
Rcpp::Rcout << FE.n_rows << std::endl;
return(FEE) ;
【问题讨论】:
帮助我们帮助您:提供minimal reproducible example。我将从一个独立的 C++ 文件开始,该文件导出具有// [[Rcpp::export]]
属性的函数并以这种方式重现不需要的行为,然后你有一个简单的最小可重现代码到 edit 到你的问题中,以便我们能够看到什么问题是。
同意,请参阅更新。我不想发布完整的项目骨架等。
也许你应该,或者至少也许你应该更仔细地查看骨架生成的内容:在一个包中你不需要Rcpp::depends()
或Rcpp::plugins()
,因为这在@987654329 中处理@ 文件级别(也可能是 src/Makevars
,但现在 C++11 已经是默认值了)。一切无害——但细节很重要。
这里有一个例子,但不可重现;我在“答案”中演示了此代码按您描述的那样工作。您是否在自己的机器上尝试过这个exact 代码?它编译得好吗?如果是这样,当您从 R 中调用它时,它究竟表现如何?
优秀的点让我试着提炼一下我的情况。
【参考方案1】:
在我的系统(Ubuntu 20.04,R 4.0.0)上,这可以正常工作(在添加 // [[Rcpp::export]]
属性以确保可以从 R 调用该函数之后):
sillyme(diag(2))
# Hello World!
# 2
# [,1] [,2]
# [1,] 1 0
# [2,] 0 1
【讨论】:
是的,[[Rcpp::export]]
在一个包中很重要!如果它丢失了,你会得到一个警告,如果你忽略那些......那么你可能会得到令人失望的结果。以上是关于RCPP Armadillo:在函数中打印整数值的主要内容,如果未能解决你的问题,请参考以下文章
(Rcpp, armadillo) 将 arma::vec 转换为 arma::mat
如何通过在 Rcpp 或 Armadillo 中将矩阵乘以向量元素来复制 R 的功能?
Rcpp Armadillo:RStudio 说“exp”不明确