我想将带有功率元素(x^y)的R代码转换为Rcpp。Rcpp使用pow(x,y),但它似乎没有矢量化。下面的例子返回NaN NaN.
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector vecTest(NumericVector x) {
return pow(x, 0.25);
}
/*** R
test <- c(-1.19556e+12, -1.24111e+12)
vecTest(test)
*/
我可以写一个for循环,它将遍历x向量的元素,但我想知道是否有一些东西我只是错过了。
有时有帮助
-
查看定义要使用的函数的头文件
-
查看一些部署你想要使用的功能的单元测试
-
保持你的例子简单
-
稍微改变参数
-
确保从你想要点击的命名空间点击函数
#include <Rcpp.h>
// [[Rcpp::export]]
Rcpp::NumericVector mypow(Rcpp::NumericVector x, double expo) {
return Rcpp::pow(x, expo);
}
/*** R
v <- c(2, 3, 4, 1.2e12, -1.2e12)
mypow(v, 2)
mypow(v, 0.5)
*/
输出> Rcpp::sourceCpp("~/git/stackoverflow/68852817/answer.cpp")
> v <- c(2,3,4)
> mypow(v, 2)
[1] 4.00e+00 9.00e+00 1.60e+01 1.44e+24 1.44e+24
> mypow(v, 0.5)
[1] 1.41421e+00 1.73205e+00 2.00000e+00 1.09545e+06 NaN
>
似乎像广告宣传的那样有效。按标量求幂的矢量参数。
Edit:更新以显示您的示例中的一些'大'值。负实数的根不起作用,但这是一个数学问题,而不是编译器、库或包的问题。