【发布时间】:2021-01-07 16:07:36
【问题描述】:
考虑这个 Rcpp Armadillo 函数:
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace arma;
// [[Rcpp::export]]
vec testfun(const vec &x,
const double &y,
const double &z)
{
vec out = ((y < x) - z) % (x - y);
return out;
}
现在运行以下 R 脚本我得到不一致的结果:
Rcpp::sourceCpp("functions/test.cpp")
x <- 1:3
y <- 2
z <- 0.5
out_r <- ((y < x) - z) * (x - y)
out_cpp <- testfun(x, y, z)
print(out_r)
print(out_cpp)
[1] 0.5 0.0 0.5
[,1]
[1,] 0
[2,] 0
[3,] 1
所以不知何故,比较失败了。对于如何解决这个问题的任何建议,我都会很高兴。来自 R,我认为循环对于这项任务来说太复杂了。也许我错了。
【问题讨论】:
-
在 C++ 中不会自动回收。将标量 double 展开为向量,然后进行比较——Rcpp Sugar 涵盖了这一点。
-
对不起:“计算”不是“比较”。我们有矢量化操作,但你必须准备输入。
标签: r rcpp armadillo rcpparmadillo