1-管道函數(shù)

今天想要研究一下R語言中含有百分號(hào)(%)符號(hào)的含義谬莹,之前沒系統(tǒng)歸納過,就借此機(jī)會(huì)好好做個(gè)筆記吧固以。


了解管道函數(shù)

使用R語言處理數(shù)據(jù)或者分析掂僵,很多時(shí)候免不了要寫連續(xù)輸入輸出的代碼,按照傳統(tǒng)書寫方式或者習(xí)慣昆码,初學(xué)者往往會(huì)引入一大堆中介變量气忠,或者使用函數(shù)嵌套進(jìn)行一次性輸出。

1赋咽、使用中介變量會(huì)使得內(nèi)存開銷成倍增長(zhǎng)旧噪,特別是你的原始數(shù)據(jù)量非常大而內(nèi)存又有限,在一個(gè)處理過程中引入太多中介對(duì)象脓匿,不僅代碼冗余淘钟,內(nèi)存也會(huì)迅速透支。
2陪毡、使用函數(shù)嵌套則避免了內(nèi)存占用的問題米母,但是嵌套太多層函數(shù)袱瓮,會(huì)造成代碼難以理解,閱讀困難爱咬,甚至給今后的項(xiàng)目復(fù)用造成很大的困擾尺借。

  • 因此R中的大佬們也意識(shí)到這個(gè)問題,因此就引入了管道操作符函數(shù)精拟,進(jìn)行連續(xù)傳參燎斩,實(shí)現(xiàn)了內(nèi)存節(jié)省、代碼優(yōu)化的需求蜂绎。
  • 通常我們使用最多的管道函數(shù)來自于magrittr包栅表,該包中管道操作函數(shù)寫作%>%,這是一個(gè)在R語言中使用非常頻繁的函數(shù),很多比較成熟的項(xiàng)目擴(kuò)展包都已經(jīng)實(shí)現(xiàn)了管道操作函數(shù)的內(nèi)置师枣。(比如dplyr怪瓶、rvest、leaflet等都實(shí)現(xiàn)了默認(rèn)調(diào)用)践美。

應(yīng)用管道函數(shù)

  1. %>%:表示將左邊的結(jié)果傳遞給右邊洗贰,通常右邊是一個(gè)函數(shù),它會(huì)對(duì)傳過來的結(jié)果進(jìn)行相對(duì)應(yīng)的計(jì)算陨倡。
> library(magrittr)   #首先加載R包
> x1 %>% abs %>% sort %>% print
 [1] 0.4099607 0.4564930 0.7520911 0.8002720 1.0047015 1.0146603
 [7] 1.5045253 1.5460878 1.5702044 1.7963906
  • 解釋:將x1的變量傳給abs函數(shù)敛滋,abs函數(shù)會(huì)給x1取絕對(duì)值,然后將絕對(duì)值后的結(jié)果傳給sort函數(shù)兴革,該函數(shù)對(duì)這個(gè)結(jié)果進(jìn)行排序绎晃,排完序之后會(huì)將結(jié)果傳遞給print函數(shù),這個(gè)函數(shù)會(huì)將最終結(jié)果打印顯示出來杂曲。

2.%<>%:與%>%類似庶艾,也是將左邊的結(jié)果傳遞給右邊的函數(shù)進(jìn)行計(jì)算,不同的是這個(gè)操作符會(huì)將最后的結(jié)果返回給最開始的變量擎勘。

> x2 %<>% abs %<>% sort %<>% print
 [1] 0.4099607 0.4564930 0.7520911 0.8002720 1.0047015 1.0146603
 [7] 1.5045253 1.5460878 1.5702044 1.7963906
  • emmm咱揍,對(duì)的,目前看來這與上面的代碼結(jié)果十分一致货抄。
    但是區(qū)別正是在于最開始的變量啦述召。
> x1
 [1]  0.4099607  0.7520911 -1.0047015 -0.4564930  1.0146603
 [6]  1.5045253  0.8002720  1.5460878  1.7963906 -1.5702044
> x2
 [1] 0.4099607 0.4564930 0.7520911 0.8002720 1.0047015 1.0146603
 [7] 1.5045253 1.5460878 1.5702044 1.7963906
  • %>%操作符不會(huì)將結(jié)果傳遞給原始的x1變量,而%<>%操作符會(huì)在計(jì)算完成后蟹地,將結(jié)果傳遞給原始變量x2积暖。(可以仔細(xì)比對(duì)一下哦)

3.%T>%:會(huì)將左邊的結(jié)果傳遞給右邊進(jìn)行一些運(yùn)算,但不會(huì)返回運(yùn)算后結(jié)果怪与,只會(huì)返回原始的結(jié)果或者說上一級(jí)的結(jié)果夺刑。

> x3 %T>% abs %>% sort %>% print
 [1] -1.5702044 -1.0047015 -0.4564930  0.4099607  0.7520911
 [6]  0.8002720  1.0146603  1.5045253  1.5460878  1.7963906
  • 從上述結(jié)果可以發(fā)現(xiàn),和x1、x2經(jīng)過管道傳送之后的結(jié)果實(shí)在是差別太大了吧遍愿。abs函數(shù)的結(jié)果并沒有傳遞到下一級(jí)函數(shù)中存淫,傳遞的仍是x3的結(jié)果感覺這個(gè)函數(shù)好像什么存在感都木有,但事實(shí)證明好像還真是這樣沼填。好吧桅咆。

4.%$%:該操作符的左邊通常不是一個(gè)變量,而是一個(gè)數(shù)據(jù)框或者列表坞笙,它可以將左邊的矩陣或者數(shù)據(jù)框傳遞到右邊的函數(shù)進(jìn)行運(yùn)算岩饼。

> data.frame(XX=x3) %$% ts.plot(XX)
  • 左邊產(chǎn)生一個(gè)以XX為列名的數(shù)據(jù)框,傳遞到右邊畫圖函數(shù)薛夜,直接就可以讀出XX所代表的數(shù)據(jù)籍茧。是不是很像attach函數(shù)或者ggplot中作圖時(shí)的使用嘞。

5.%in%:該操作符的意思是匹配的含義梯澜,相當(dāng)于R中的 match函數(shù)寞冯,其表達(dá)的意思是左邊的元素在右邊的向量中是否存在,如果存在則返回TRUE晚伙,否則返回FALSE吮龄。

> c(1,2,3,4)%in%c(1:10)
[1] TRUE TRUE TRUE TRUE
> c(1:10)%in%c(1,2,3,4)
 [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
  • 主要是記住哪個(gè)在左,哪個(gè)在右撬腾,相當(dāng)于將左邊的樣本與右邊的標(biāo)準(zhǔn)進(jìn)行匹配螟蝙。

上述幾個(gè)就是常用的恢恼,但管道函數(shù)可不只這些哦民傻,如果大家想了解得更深入可以利用R的help(%<%)來獲取對(duì)應(yīng)函數(shù)的解釋文檔哦。


參考來源:
如何使用管道操作符優(yōu)雅的書寫R語言代碼在R語言中含有百分號(hào)(%)符號(hào)的含義

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末场斑,一起剝皮案震驚了整個(gè)濱河市漓踢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漏隐,老刑警劉巖喧半,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異青责,居然都是意外死亡挺据,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門脖隶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扁耐,“玉大人,你說我怎么就攤上這事产阱⊥癯疲” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)王暗。 經(jīng)常有香客問我悔据,道長(zhǎng),這世上最難降的妖魔是什么俗壹? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任科汗,我火速辦了婚禮,結(jié)果婚禮上绷雏,老公的妹妹穿的比我還像新娘肛捍。我一直安慰自己,他們只是感情好之众,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布拙毫。 她就那樣靜靜地躺著,像睡著了一般棺禾。 火紅的嫁衣襯著肌膚如雪缀蹄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天膘婶,我揣著相機(jī)與錄音缺前,去河邊找鬼。 笑死悬襟,一個(gè)胖子當(dāng)著我的面吹牛衅码,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脊岳,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逝段,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了割捅?” 一聲冷哼從身側(cè)響起奶躯,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亿驾,沒想到半個(gè)月后嘹黔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莫瞬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年儡蔓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疼邀。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喂江,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出檩小,到底是詐尸還是另有隱情开呐,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站筐付,受9級(jí)特大地震影響卵惦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓦戚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一沮尿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧较解,春花似錦畜疾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奸焙,卻和暖如春瞎暑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背与帆。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工了赌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玄糟。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓勿她,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親阵翎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逢并,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355