R語言-邏輯運(yùn)算

本次課程簡要介紹一下R中的邏輯運(yùn)算雀瓢。

R中有兩個邏輯值,也稱為布爾值酌住。 它們分別是TRUEFALSE店归。 在R中,可以構(gòu)造邏輯表達(dá)式酪我,其結(jié)果為TRUEFALSE消痛。

相等

創(chuàng)建邏輯表達(dá)式需要邏輯運(yùn)算符,邏輯運(yùn)算符的功能類似于+都哭、-秩伞、*、/等算術(shù)運(yùn)算符欺矫。我們首先學(xué)習(xí)的邏輯運(yùn)算符是相等運(yùn)算符纱新,用2個等號表示:==。簡單嘗試下:

> TRUE == TRUE
[1] TRUE

與算術(shù)運(yùn)算符一樣穆趴,邏輯運(yùn)算符也能使用括號()來分組脸爱,以改變運(yùn)算順序。

> FALSE == (TRUE == FALSE)
[1] TRUE

等式邏輯運(yùn)算符也可以用來比較數(shù)字未妹。

> 6 == 7
[1] FALSE

結(jié)果是FALSE簿废,因?yàn)?code>6比7小空入,他們并不相等。

小于族檬、大于

小于運(yùn)算符< 用來比較左側(cè)的數(shù)字是否小于右側(cè)的數(shù)字歪赢。我們再來用<比較67

> 6 < 7
[1] TRUE

小于運(yùn)算符還可以和等號一起組成運(yùn)算符<=导梆,表示左側(cè)的數(shù)字小于或等于右側(cè)的數(shù)字。

> 10 <= 10
[1] TRUE

相對應(yīng)的迂烁,也存在大于運(yùn)算符>和大于等于運(yùn)算符>=看尼。

不相等

上面提到相等的運(yùn)算符,在R中還有不相等運(yùn)算符!=盟步,用來計算兩邊的值是否不相等藏斩。因?yàn)楸磉_(dá)式TRUE != FALSE的結(jié)果是TRUE。與相等運(yùn)算符一樣却盘,不相等運(yùn)算也可以用于數(shù)字狰域。

> 5 != 7
[1] TRUE

取反

為了取反布爾表達(dá)式,我們可以用!(非)操作符黄橘。比如! TRUE (非真)和 FALSE是相等的兆览。我們可以嘗試對5 == 7的結(jié)果取反。

> !(5 == 7)
[1] TRUE

與或

當(dāng)我們需要檢查多個邏輯表達(dá)式之間的關(guān)系時塞关,就要用到運(yùn)算符抬探。

與(AND)

讓我們先看一下運(yùn)算符的工作方式。 在R中帆赢,有2運(yùn)算符小压,分別是:&&&。這兩個運(yùn)算符的工作方式相似椰于。即如果運(yùn)算符兩邊的布爾值均為TRUE怠益,則返回TRUE。否則瘾婿,返回FALSE蜻牢。

> FALSE & FALSE
[1] FALSE

我們可以使用&運(yùn)算符對向量進(jìn)行運(yùn)算。 &&版本僅比較向量的第一個成員偏陪。 下面通過一個例子看看兩者的區(qū)別孩饼。

> TRUE & c(TRUE, FALSE, FALSE)
[1]  TRUE FALSE FALSE

在這里,又一次看到了向量的循環(huán)使用竹挡。上述代碼等價于c(TRUE, TRUE, TRUE) & c(TRUE, FALSE, FALSE)《迫ⅲ現(xiàn)在我們把&替換成&&

> TRUE && c(TRUE, FALSE, FALSE)
[1] TRUE

在這種情況下揪罕,左邊的TRUE只和右邊向量的第一個元素TRUE進(jìn)行了操作梯码,剩余的元素都被忽略了宝泵。

或(OR)

使用運(yùn)算符|比較兩側(cè)的表達(dá)式,如果兩邊都是TRUE轩娶,同樣返回TRUE儿奶。但是如果只有一邊為TRUE,結(jié)果依然返回TRUE鳄抒。只有當(dāng)兩邊的結(jié)果都是FALSE時闯捎,結(jié)果才是FALSE

對于上面的例子许溅,我們使用|||分別進(jìn)行重新比較瓤鼻。

> TRUE | c(TRUE, FALSE, FALSE)
[1] TRUE TRUE TRUE

> TRUE || c(TRUE, FALSE, FALSE)
[1] TRUE

運(yùn)算順序

在算術(shù)運(yùn)算符中存在運(yùn)算順序,比如乘(*)的運(yùn)算優(yōu)先級就比加(+)的高贤重。在邏輯運(yùn)算符中同樣有優(yōu)先級茬祷。首先與運(yùn)算的優(yōu)先級高于或運(yùn)算。我們來看一個可能存在歧義的例子并蝗。

> 5 > 8 || 6 != 8 && 4 > 3.9
[1] TRUE

這個表達(dá)式等價于5 > 8 || (6 != 8 && 4 > 3.9)祭犯,各表達(dá)式的布爾值是FALSE || (TRUE && TRUE)。所以結(jié)果是TRUE滚停。下面還有幾個例子沃粗。

找出下面表達(dá)式中最后結(jié)果為的:

1: 99.99 > 100 || 45 < 7.3 || 4 != 4.0
2: FALSE || TRUE && FALSE
3: TRUE && FALSE || 9 >= 4 && 3 < 6
4: TRUE && 62 < 62 && 44 >= 44

找出下面表達(dá)式中最后結(jié)果為的:

1: FALSE || TRUE && 6 != 4 || 9 > 4
2: FALSE && 6 >= 6 || 7 >= 8 || 50 <= 49.5
3: 6 >= -9 && !(6 > 7) && !(!TRUE)
4: !(8 > 4) ||  5 == 5.0 && 7.8 >= 7.79

相關(guān)函數(shù)

現(xiàn)在我們對R中的邏輯表達(dá)式有一點(diǎn)了解了,我們可以使用R中提供的一些函數(shù)來處理邏輯表達(dá)式键畴。

isTRUE()

比如isTRUE()函數(shù)陪每,它接受一個參數(shù),如果參數(shù)的計算結(jié)果為真镰吵,則返回TRUE,反之返回FALSE檩禾。

> isTRUE(6 > 4)
[1] TRUE

identical()

函數(shù)identical()用來比較兩個R對象是否一致,一致時返回TRUE疤祭。

> identical('twins', 'twins')
[1] TRUE

xor()

有一個值得注意的函數(shù)是異或函數(shù)xor()盼产。這個函數(shù)接受2個參數(shù),當(dāng)一個參數(shù)為TRUE勺馆,另一個參數(shù)為FALSE時戏售,結(jié)果返回TRUE,其他情況返回FALSE草穆。

> xor(5 == 6, !FALSE)
[1] TRUE

which()

which()函數(shù)會返回參數(shù)表達(dá)式中結(jié)果為TRUE的元素索引灌灾。

> ints <- sample(10)
> ints
 [1]  9  3  1  8 10  4  2  5  6  7
> which(ints > 7)
[1] 1 4 5

ints > 7的返回結(jié)果中,第1悲柱、4锋喜、5位元素是TRUE。所以最終返回1、4嘿般、5段标。

any()、all()

which()函數(shù)一樣炉奴,函數(shù)any()all()都將邏輯向量作為其參數(shù)逼庞。
如果邏輯向量中的一個或多個元素為TRUE,則any()函數(shù)將返回TRUE瞻赶。
如果邏輯向量中的每個元素均為TRUE赛糟,則all()函數(shù)將返回TRUE

> any (ints < 0)
[1] FALSE

> all(ints > 0)
[1] TRUE

小結(jié)

邏輯運(yùn)算符:

  • 相等 —— ==
  • 不相等 —— !== 比較兩側(cè)的表達(dá)式是否相等
  • 取反 —— ! 對布爾值取反
  • 大于砸逊、大于等于 —— >,>=
  • 小于璧南、小于等于 —— <,<=
  • 與 —— &&& 兩側(cè)都為真痹兜,則結(jié)果為真穆咐。否則結(jié)果為假
  • 或 —— |颤诀,|| 兩側(cè)都為假字旭,則結(jié)果為假。有一側(cè)為真崖叫,則結(jié)果為真遗淳。

運(yùn)算符的優(yōu)先級優(yōu)先級

R語言學(xué)習(xí)7-邏輯運(yùn)算

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市心傀,隨后出現(xiàn)的幾起案子屈暗,更是在濱河造成了極大的恐慌,老刑警劉巖脂男,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件养叛,死亡現(xiàn)場離奇詭異,居然都是意外死亡宰翅,警方通過查閱死者的電腦和手機(jī)弃甥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汁讼,“玉大人淆攻,你說我怎么就攤上這事『偌埽” “怎么了瓶珊?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耸彪。 經(jīng)常有香客問我伞芹,道長,這世上最難降的妖魔是什么蝉娜? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任丑瞧,我火速辦了婚禮柑土,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绊汹。我一直安慰自己稽屏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布西乖。 她就那樣靜靜地躺著狐榔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪获雕。 梳的紋絲不亂的頭發(fā)上薄腻,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機(jī)與錄音届案,去河邊找鬼庵楷。 笑死,一個胖子當(dāng)著我的面吹牛楣颠,可吹牛的內(nèi)容都是我干的尽纽。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼童漩,長吁一口氣:“原來是場噩夢啊……” “哼弄贿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矫膨,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤差凹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侧馅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體危尿,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年馁痴,在試婚紗的時候發(fā)現(xiàn)自己被綠了谊娇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡弥搞,死狀恐怖邮绿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情攀例,我是刑警寧澤船逮,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站粤铭,受9級特大地震影響挖胃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一酱鸭、第九天 我趴在偏房一處隱蔽的房頂上張望吗垮。 院中可真熱鬧,春花似錦凹髓、人聲如沸烁登。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饵沧。三九已至,卻和暖如春赌躺,著一層夾襖步出監(jiān)牢的瞬間狼牺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工礼患, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留是钥,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓缅叠,卻偏偏與公主長得像悄泥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痪署,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容