2014-12-03 208 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