我可以将数字提高到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] 0.125
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),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