apply 函數(shù)家族

apply 函數(shù)的主要優(yōu)點是我們可以擺脫循環(huán)操作蘸际。
r 中的應(yīng)用族包含 apply()、lapply()、sapply()衩辟、mapply() 和 tapply()。
最大的問題之一是如何以及何時使用這些功能波附?
答案很簡單艺晴,這取決于數(shù)據(jù)集的結(jié)構(gòu)以及您想要的結(jié)果。
下面我們來一一看看如何執(zhí)行這些功能掸屡。

1. apply()

mymatrix<-matrix(1:9,nrow=3)
mymatrix
[,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
#Let’s calculate the row sum.
apply(mymatrix,1,sum)  
[1] 12 15 18
#Let’s calculate the column sum
apply(mymatrix,2,sum)
[1]  6 15 24
#Let’s create NA value in the matrix and see how we can execute the function.
mymatrix[2,3]<-NA
apply(mymatrix,1,sum)
[1] 12 NA 18
#Insert na.rm function in the above code and see the result.
apply(mymatrix,1,sum,na.rm=TRUE)
[1] 12  7 18

2. lapply()

lapply 返回一個與 X 長度相同的列表封寞,其中的每個元素都是將 FUN 應(yīng)用于 X 的對應(yīng)元素的結(jié)果。

mylist<-list(A=matrix(1:9,nrow=3),B=1:5,C=8)
mylist
$A
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
$B
[1] 1 2 3 4 5
$C
[1] 8
#Let’s calculate the sum of each list.
lapply(mylist,sum)
$A
[1] 45
$B
[1] 15
$C
[1] 8

你可以看到結(jié)果是以列表形式保存的仅财。假設(shè)你想得到矢量的結(jié)果狈究,只需取消列表即可。

unlist(lapply(mylist,sum))

您可以創(chuàng)建自己的函數(shù)并傳入該函數(shù)满着。
例如谦炒,假設(shè)您想將每個元素與值 20 相乘贯莺,只需使用以下代碼。

lapply(mylist,function(x) x*20)

3. sapply()

sapply 是 lapply 的用戶友好版本和包裝器宁改,默認(rèn)返回一個向量缕探、矩陣,如果 simplify = "array"还蹲,則通過應(yīng)用 simplify2array() 返回一個數(shù)組爹耗。sapply(x, f, simplify = FALSE, USE.NAMES = FALSE) 與 lapply(x, f) 相同。

sapply(mylist,sum)
A  B  C
45 15  8

4. mapply()

m 代表多變量應(yīng)用谜喊。
讓我們舉個例子潭兽,假設(shè)我們有四次重復(fù)值 1,我們想要在 4 次重復(fù) 1斗遏,在 3 次重復(fù) 2山卦,在 2 次重復(fù) 3,在 1 次重復(fù) 4诵次。

mapply(rep,1:4,4:1)
[[1]]
[1] 1 1 1 1
[[2]]
[1] 2 2 2
[[3]]
[1] 3 3
[[4]]
[1] 4

讓我們創(chuàng)建一個用戶定義的函數(shù)账蓉,看看 mapply 將如何執(zhí)行。
假設(shè)我們有兩個向量 x 和 y逾一。

x<-c(A=20,B=1,C=40)
y<-c(J=430,K=50,L=10)

想象一下铸本,如果您要將這兩個向量相加并乘以 2。首先遵堵,創(chuàng)建函數(shù)并將其傳遞給 mapply箱玷。

simply<-function(u,v){
  (u+v)*2
}
mapply(simply,x,y)
A   B   C
900 102 100
  1. tapply()
tapply(iris$Sepal.Length,iris$Species,max)
setosa versicolor  virginica
  5.8        7.0        7.9

apply:- 在一個數(shù)組的邊上應(yīng)用函數(shù)。
lapply:- 在一個列表上循環(huán)陌宿,在每個元素上評估一個函數(shù)
sapply:- 與 lapply 相同锡足,但嘗試簡單的結(jié)果。
mapply:- lapply的多變量版本
tapply:- 在一個向量的子集上應(yīng)用一個函數(shù)限番。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舱污,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弥虐,更是在濱河造成了極大的恐慌扩灯,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霜瘪,死亡現(xiàn)場離奇詭異珠插,居然都是意外死亡,警方通過查閱死者的電腦和手機颖对,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門捻撑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事顾患》妫” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵江解,是天一觀的道長设预。 經(jīng)常有香客問我,道長犁河,這世上最難降的妖魔是什么鳖枕? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮桨螺,結(jié)果婚禮上宾符,老公的妹妹穿的比我還像新娘。我一直安慰自己灭翔,他們只是感情好魏烫,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肝箱,像睡著了一般则奥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狭园,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音糊治,去河邊找鬼唱矛。 笑死,一個胖子當(dāng)著我的面吹牛井辜,可吹牛的內(nèi)容都是我干的绎谦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼粥脚,長吁一口氣:“原來是場噩夢啊……” “哼窃肠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刷允,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤冤留,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后树灶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纤怒,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年天通,在試婚紗的時候發(fā)現(xiàn)自己被綠了泊窘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烘豹,靈堂內(nèi)的尸體忽然破棺而出瓜贾,到底是詐尸還是另有隱情,我是刑警寧澤携悯,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布祭芦,位于F島的核電站,受9級特大地震影響蚌卤,放射性物質(zhì)發(fā)生泄漏实束。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一逊彭、第九天 我趴在偏房一處隱蔽的房頂上張望咸灿。 院中可真熱鬧,春花似錦侮叮、人聲如沸避矢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽审胸。三九已至,卻和暖如春卸勺,著一層夾襖步出監(jiān)牢的瞬間砂沛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工曙求, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碍庵,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓悟狱,卻偏偏與公主長得像静浴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挤渐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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