2014-12-03 209 views
2

所以,我在R上的下面的代码:奇怪的行为

y 
a <- -0.1  
test <- (1/((y+as.numeric(!y))*(a-1))) 
test 
test^a 
-0.9090909^a 

给我输出:

> 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 

我不明白为什么它正在测试的时候给我的NaN权力a,当清楚时,我可以简单地从测试中复制一个单一的值,并将其提升到权力a,这是有效的。使用测试[1]^a也不起作用。

回答

6

-0.9090909^a-(0.9090909^a)相同。注意括号。

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

> (-0.9090909)^-0.1 
[1] NaN 
+4

这是[R FAQ 7.33](http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why -are - 权力 - 的负号码,wrong_003f) – 2014-12-03 13:40:30

2

您正在尝试取一个负数的根。如果你想做复杂的算术,你需要转换成复数

as.complex(test)^a 
# [1] 0.9601644-0.3119763i 0.7249946-0.2355650i 0.9601644-0.3119763i 
# [4] 0.6115633-0.1987090i 0.9601644-0.3119763i 0.9601644-0.3119763i 
# [7] 0.6435367-0.2090978i 0.9601644-0.3119763i 0.7357171-0.2390490i 
#[10] 0.9601644-0.3119763i 0.7022627-0.2281790i 0.6243418-0.2028609i 
#[13] 0.9601644-0.3119763i 0.9601644-0.3119763i 0.9601644-0.3119763i 
#[16] 0.9601644-0.3119763i 0.5389643-0.1751201i 0.9601644-0.3119763i 
#[19] 0.9601644-0.3119763i 0.9601644-0.3119763i 0.7623605-0.2477059i 
#[22] 0.9601644-0.3119763i 0.6912151-0.2245894i 0.9601644-0.3119763i