R Rcpp如何在pow中使用向量

  • 本文关键字:向量 pow Rcpp r rcpp
  • 更新时间 :
  • 英文 :


我想将带有功率元素(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:更新以显示您的示例中的一些'大'值。负实数的根不起作用,但这是一个数学问题,而不是编译器、库或包的问题。

最新更新