R Rcpp如何在pow中使用向量

R Rcpp how to use a vector in pow

我想将带有幂元素 (x^y) 的 R 代码转换为 Rcpp。 Rcpp 使用 pow(x,y) 但它似乎没有被矢量化。下面的例子returns 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/Whosebug/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
> 

似乎与宣传的一样有效。标量求幂的矢量参数。

编辑: 已更新以在示例中显示一些 'large' 值。负实数的根不起作用,但这是一个 数学 问题,而不是编译器、库或包的问题。