2017-05-26 181 views
0

我是R新手。我想確認一下我對這個概念的理解是否正確。OR操作員如何工作

在使用邏輯運算符OR時,我無法理解下面的輸出。當第二個元素爲0時,情況1的結果爲「假」,而當這些數字> 0時,情況1的結果爲「真」。這是因爲0總是被認爲是「FAlse」,在這種情況下,這兩個值都是「假」?

案例1

v <- c(3,0,TRUE,2+2i) 
t <- c(4,0,FALSE,2+3i) 
print(v|t) 
#[1] TRUE FALSE TRUE TRUE 

案例2

v <- c(3,0,TRUE,2+2i) 
t <- c(3,0,FALSE,2+3i) 
print(v|t) 
#[1] TRUE FALSE TRUE TRUE 
+2

你應該閱讀文檔。如果將0以外的數值作爲邏輯值轉換爲TRUE –

+0

有關更多詳細信息,請參閱https://stackoverflow.com/questions/5681166/what-evaluates-to-true-false-in-r – airos

回答

2

你正在做的兩個矢量v和T的的elementwise邏輯比較。而且,如果轉換爲邏輯,任何數字> 0的計算結果都爲TRUE,您將獲得此輸出。 (請注意下面的評論)

您可以在後臺認爲這happenig的(對於情況1):

as.logical(3) | as.logical(4) 
    as.logical(0) | as.logical(0) 
      TRUE | TRUE 
as.logical(2+2i) | as.logical(2+2i) 

這將產生我們的輸出:

TRUE FALSE TRUE TRUE 
+2

數字> 0,也是'isTRUE(as.logical(-5))'和'isTRUE(as.logical(-Inf))' –

1

考慮R TRUE爲1,FALSE爲0.你的理解是正確的。您有元素檢查,並且在v[2]=0t[2]=0,R理解爲:0 | 0因此爲0的情況下,即FALSE OR FALSE = FALSE

您可以通過將0個輸入中的一個(v [2] = 0和t [2] = 0)更改爲!=0來檢查。

作爲一個評論,雖然: 你必須考慮到,你不能使用c()來創建其中不同類的變量。 R在這種情況下將您提供的所有輸入解釋爲複數。我的意思是TRUE轉化爲1+0i,假以0+0i(檢查: print(v) >v [1] -3+0i 0+0i 1+0i 0+2i