我可以在 R 中提高一个数的向量次方吗?
Can I raise a number to the power of a vector in R?
我有一个向量,我想在不使用循环的情况下对一个数进行向量元素的幂运算。有简单的方法吗?
我尝试了 a^b,其中 a 是数字,b 是向量,但这似乎对我不起作用。
在 R 中必须小心执行取幂运算,因为负底数会给出错误的结果。
错误
power <- function(x, y) x^y
power(2, 3)
#[1] 8
power(2, -3)
#[1] 0.125
power(1, 1/3)
#[1] 1
power(-1, 1/3)
#[1] NaN
对
power <- function(x, y) sign(x) * abs(x)^y
power(2, 3)
#[1] 8
power(2, -3)
#[1] 0.125
power(1, 1/3)
#[1] 1
power(-1, 1/3)
#[1] -1
现在看看第二个 power
函数是否像问题所要求的那样被矢量化了。
power(2, c(1:4, pi, -pi, -1/3, 1/3))
#[1] 2.0000000 4.0000000 8.0000000 16.0000000 8.8249778 0.1133147
#[7] 0.7937005 1.2599210
outer(c(-2, 2), c(1:4, pi, -pi, -1/3, 1/3), power)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#[1,] -2 -4 -8 -16 -8.824978 -0.1133147 -0.7937005 -1.259921
#[2,] 2 4 8 16 8.824978 0.1133147 0.7937005 1.259921
我有一个向量,我想在不使用循环的情况下对一个数进行向量元素的幂运算。有简单的方法吗?
我尝试了 a^b,其中 a 是数字,b 是向量,但这似乎对我不起作用。
在 R 中必须小心执行取幂运算,因为负底数会给出错误的结果。
错误
power <- function(x, y) x^y
power(2, 3)
#[1] 8
power(2, -3)
#[1] 0.125
power(1, 1/3)
#[1] 1
power(-1, 1/3)
#[1] NaN
对
power <- function(x, y) sign(x) * abs(x)^y
power(2, 3)
#[1] 8
power(2, -3)
#[1] 0.125
power(1, 1/3)
#[1] 1
power(-1, 1/3)
#[1] -1
现在看看第二个 power
函数是否像问题所要求的那样被矢量化了。
power(2, c(1:4, pi, -pi, -1/3, 1/3))
#[1] 2.0000000 4.0000000 8.0000000 16.0000000 8.8249778 0.1133147
#[7] 0.7937005 1.2599210
outer(c(-2, 2), c(1:4, pi, -pi, -1/3, 1/3), power)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#[1,] -2 -4 -8 -16 -8.824978 -0.1133147 -0.7937005 -1.259921
#[2,] 2 4 8 16 8.824978 0.1133147 0.7937005 1.259921