R的奇怪行为

Aca*_*car 2 math r exponent

所以,我在R中有以下代码:

y
a <- -0.1    
test <- (1/((y+as.numeric(!y))*(a-1)))  
test  
test^a  
-0.9090909^a 
Run Code Online (Sandbox Code Playgroud)

给我输出:

> y  
 [1] 0.00000000 0.06024096 0.00000000 0.01098901 0.00000000 0.00000000
 [7] 0.01829268 0.00000000 0.06976744 0.00000000 0.04380665 0.01351351
[13] 0.00000000 0.00000000 0.00000000 0.00000000 0.00310559 0.00000000
[19] 0.00000000 0.00000000 0.09957447 0.00000000 0.03738318 0.00000000
> a <- -0.1
> test <- (1/((y+as.numeric(!y))*(a-1)))
> test
 [1]   -0.9090909  -15.0909091   -0.9090909  -82.7272727   -0.9090909
 [6]   -0.9090909  -49.6969697   -0.9090909  -13.0303030   -0.9090909
[11]  -20.7523511  -67.2727273   -0.9090909   -0.9090909   -0.9090909
[16]   -0.9090909 -292.7272727   -0.9090909   -0.9090909   -0.9090909
[21]   -9.1297591   -0.9090909  -24.3181818   -0.9090909  

> test^a  
 [1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[17] NaN NaN NaN NaN NaN NaN NaN NaN  

> -0.9090909^a  
[1] -1.009577
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在测试电源时它给了我NaN,显然,我可以简单地从测试中复制一个值并将其提升到电源a,这样可行.使用test [1] ^ a也不起作用.

Kon*_*lph 8

-0.9090909 ^ a是一样的-(0.9090909 ^ a).请注意括号.

但是,您test包含负值,并且您不能取负数的根.尝试(-0.9090909) ^ a验证这一点:

> (-0.9090909) ^ -0.1
[1] NaN
Run Code Online (Sandbox Code Playgroud)

  • 这是[R FAQ 7.33](http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-are-powers-of-negative-numbers-wrong_003f) (5认同)