2016-01-20 16 views
3

我正試圖理解! R運算符更好,我很困惑它如何適用於數字。以下代碼表示什麼,以及爲什麼兩個相等查詢不相同?在R中使用NOT(!)運算符號碼

> !5 == 7 
[1] TRUE 
> 5 == !7 
[1] FALSE 
> !5 
[1] FALSE 

謝謝!

+3

檢查'?Syntax'和玩括號。 – Henrik

+1

一般說明:即使您知道操作順序,也不要寫'!5 == 7'。你只會迷惑自己或其他人。 「5!= 7」也是一件事,順便說一句。 – Frank

回答

0

!脅迫其參數爲一個邏輯,即:

as.logical(-3L:3L) 
# [1] TRUE TRUE TRUE FALSE TRUE TRUE TRUE 
as.logical(seq(-2,2, by = 0.5)) 
# [1] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE 

正如你可以看到,0是假,其他一切都是TRUE。

爲了得到這方面的一個更好的感覺,看到!是 - 像R中的一切 - 一個功能:

> `!` 
function (x) .Primitive("!") 

所以,你申請的!功能數值參數,其被強制爲合乎邏輯,如上所述。

當您使用==將邏輯與數值進行比較時,該數值也被強制爲邏輯。

在你的第一個例子(!5 == 7)是由於優先順序; ==優先於!

+0

非常感謝! – KB587

3

首先:!操作員強制非邏輯邏輯,然後反轉它們。除0之外的任何值都計算爲邏輯TRUE,然後!運算符將其翻轉爲FALSE

其餘與操作順序有關。

!5 == 7 

則計算結果爲

!(5==7) 

即相當於

!(FALSE) 

它返回TRUE

5 == !7 

則計算結果爲

5 == FALSE 

它返回FALSE

相當於5 == !7(!5) == 7運算符優先級(兩種方法都返回FALSE

+0

啊,操作順序。謝謝! – KB587