小编Dan*_*iel的帖子

在 R 中使用 lapply 内的 .Call 结果不一致

我使用 Rcpp 包的Rcpp.package.skeleton函数创建了一个包,其中包含一个 .cpp 文件,其中 C++ 函数返回 0:

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
RcppExport SEXP just_zero() {
BEGIN_RCPP
    Rcpp::RNGScope __rngScope;
    return wrap(0.0);
END_RCPP
}
Run Code Online (Sandbox Code Playgroud)

当我从 RI 安装并加载包时,可以通过 lapply 使用 .Call 调用该函数。正如预期的那样,它(似乎)总是返回 0:

> x <- lapply(seq(10000), function(i) { x <- .Call('just_zero'); stopifnot(x == 0); x } )
#*no errors!*
Run Code Online (Sandbox Code Playgroud)

但是,显然返回的值包含lapply非零:

> range(simplify2array(x))
[1] 0 3
Run Code Online (Sandbox Code Playgroud)

不幸的是,使用set.seed并不使这些返回值可重现,有时我确实得到[1] 0 0,有时得到其他值,例如[1] "0" "TRUE"。另一个线索是删除该线Rcpp::RNGScope __rngScope;可以解决问题。

为什么返回的对象中有非零元素lapply(特别是当我们检查了返回的值时.Call),以及 …

r rcpp

3
推荐指数
1
解决办法
230
查看次数

标签 统计

r ×1

rcpp ×1