亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

布爾運算符&和

布爾運算符&和

翻翻過去那場雪 2019-06-15 18:40:58
布爾運算符&和根據R語言定義,之間的區別&和&&(相應地)|和||)前者是向量化的,而后者則不是。根據幫助文本,我讀到了類似于“and”和“andAu”(相應的“或”和“Orelse”)之間的差異.意思:不是所有的評估,如果它們不是必須是(即A或B或C總是正確的,如果A是真的,所以停止計算如果A是真的)有人能幫我照亮這里嗎?還有,R中是否有一個和Orelse?
查看完整描述

3 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

較短的部分被矢量化,這意味著它們可以返回一個向量,如下所示:

((-2:2) >= 0) & ((-2:2) <= 0)# [1] FALSE FALSE  TRUE FALSE FALSE

較長的表單從左到右計算,只檢查每個向量的第一個元素,因此上面給出

((-2:2) >= 0) && ((-2:2) <= 0)# [1] FALSE

正如幫助頁面所指出的,這使得更長的表單“適合于編程控制流,并且在if子句中通常是首選的。”

所以,只有在確定向量長度為1時,才需要使用長形式。

你應該絕對一點兒沒錯某些情況下,向量只有1長度,例如當它們是只返回長度1布爾值的函數時。如果向量長度可能大于1,則需要使用短形式。因此,如果您不能完全確定,您應該先檢查,或者使用簡短的形式,然后使用allany將其縮減為長度,以便在控制流語句中使用,如if.

功能allany通常用于向量化比較的結果,以查看所有或任何比較分別是否為真。這些函數的結果肯定是1,因此它們適合用于if子句,而向量比較的結果則不適用。(雖然這些結果適合用于ifelse.

最后一個區別是:&&||只需要評估盡可能多的術語(這似乎就是短路的意思)。例如,下面是一個使用未定義值的比較a如果它沒有短路,如&|別這樣,會出錯的。

a# Error: object 'a' not foundTRUE || a# [1] TRUEFALSE && a# [1] FALSETRUE | a# Error: object 'a' not foundFALSE & a# Error: object 'a' not found

最后,見第8.2.17節R-地獄,標題為“and”。


查看完整回答
反對 回復 2019-06-15
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

關于“短路”是潛在的誤導,但有一些事實(見下文)。在R/S語言中,&&||只計算第一個參數中的第一個元素。不管第一個值是多少,向量或列表中的所有其他元素都會被忽略。這些運算符設計用于使用if (cond) {} else{}構造和指導程序控制而不是構造新的矢量。這個&|運算符被設計成在向量上工作,因此它們將被“并行地”應用,也就是說,沿著最長的論證的長度。如果向量不是相同的長度,則執行較短參數的循環。

&&||如果從左到右連續的任何值都是決定性的,則計算停止并返回最終值。

> if( print(1) ) {print(2)} else {print(3)}

[1] 1

[1] 2

> if(FALSE && print(1) ) {print(2)} else {print(3)} # `print(1)` not evaluated

[1] 3

> if(TRUE && print(1) ) {print(2)} else {print(3)}

[1] 1

[1] 2

> if(TRUE && !print(1) ) {print(2)} else {print(3)}

[1] 1

[1] 3

> if(FALSE && !print(1) ) {print(2)} else {print(3)}

[1] 3


查看完整回答
反對 回復 2019-06-15
  • 3 回答
  • 0 關注
  • 674 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號