Course note for R programming - apply function
lapply(list, fun): 接收一個 list 把fun作用到整個list上 回傳list
ex: lapply(x, mean)
sapply(list, fun): 接收一個list, 迴船可以簡化的版本
如果長度都為一,回傳vector
如果長度相同,回傳matrix
如果無法判斷 回傳list
apply(matrix, Margin, fun)
margin: 代表維度 for a matrix 1 indicates rows, 2 indicates columns, c(1, 2)
這是要保留的維度
rowSums = apply(x, 1, sum)
rowMeans = apply(x, 1, mean)
colSums = apply(x, 2, sum)
colMeans = apply(x, 2, mean)
要算普通的sum/ mean 用上面這些,比用apply快
a <- array(rnorm(2*2*10), c(2,2 ,10))
apply(a, c(1, 2), mean) #保留1, 2 dimention, 結合第三維度
等同於
rowMeans(a, dim = 2)
tapply用在vector, subset: 一樣會簡化(向sapply)
前面是給訂的list data, 中間是index, 可以依照index的數值,
決定要怎麼使用function在前面的資料(像是1,1,1,3,4,2,2,3,4,3之類的)
tapply(list, list, fun)
ex: tapply(x, f, mean)
gl(3, 5): generate level
1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
產生三個level, 每個level 重複5次
split(x, f, drop = FALSE, ...)
可以把group分裂成f的樣子,回傳list
可以跟split合用,像是 lapply(split(x, f), mean)
**** ex:
s <- split(airquality, airquality$Month)
lapply(s, function(x) colMeans(x[, c("Ozone", "Solar.R", "Wind")]))
把資歷依照月份分開成一個list!!
sapply(s, function(x) colMeans(x[, c("Ozone", "Solar.R", "Wind")], na.rm = TRUE))
str(split(x, list(f1, f2)))
後面的list可以是多種factor集合
str(split(x, list(f1, f2), drop = TRUE)) 會丟掉空白的empty level
mapply 用在很像是多重的lapply, sapply
但是是可以多重的使用function, 此function可以return list
可以在此function的argument打 vector形式
list(rep(1, 4), rep(2, 3), rep(3, 2), rep(4, 1))
會等於
mapply(rep, 1:4, 4:1)
試試 mapply(rep, 1:4, 9:6)
[[1]]
[1] 1 1 1 1 1 1 1 1 1
[[2]]
[1] 2 2 2 2 2 2 2 2
[[3]]
[1] 3 3 3 3 3 3 3
[[4]]
[1] 4 4 4 4 4 4
If you want to use (copy, paste or quote) my original article, please contact me through email. (autek.roy@gmail.com) If there is any mistake or comment, please let me know. :D
如要使用(複製貼上或轉載)作者原創文章, 請來信跟我聯絡。(autek.roy@gmail.com) 如果有發現任何的錯誤與建議請留言或跟我連絡。 : )
R programming 第三週的筆記之一! For 未來查看我學過什麼+複習XD
Apply function:
lapply(list, fun): 接收一個 list 把fun作用到整個list上 回傳list
ex: lapply(x, mean)
sapply(list, fun): 接收一個list, 迴船可以簡化的版本
如果長度都為一,回傳vector
如果長度相同,回傳matrix
如果無法判斷 回傳list
apply(matrix, Margin, fun)
margin: 代表維度 for a matrix 1 indicates rows, 2 indicates columns, c(1, 2)
這是要保留的維度
rowSums = apply(x, 1, sum)
rowMeans = apply(x, 1, mean)
colSums = apply(x, 2, sum)
colMeans = apply(x, 2, mean)
要算普通的sum/ mean 用上面這些,比用apply快
a <- array(rnorm(2*2*10), c(2,2 ,10))
apply(a, c(1, 2), mean) #保留1, 2 dimention, 結合第三維度
等同於
rowMeans(a, dim = 2)
tapply用在vector, subset: 一樣會簡化(向sapply)
前面是給訂的list data, 中間是index, 可以依照index的數值,
決定要怎麼使用function在前面的資料(像是1,1,1,3,4,2,2,3,4,3之類的)
tapply(list, list, fun)
ex: tapply(x, f, mean)
gl(3, 5): generate level
1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
產生三個level, 每個level 重複5次
split(x, f, drop = FALSE, ...)
可以把group分裂成f的樣子,回傳list
可以跟split合用,像是 lapply(split(x, f), mean)
**** ex:
s <- split(airquality, airquality$Month)
lapply(s, function(x) colMeans(x[, c("Ozone", "Solar.R", "Wind")]))
把資歷依照月份分開成一個list!!
sapply(s, function(x) colMeans(x[, c("Ozone", "Solar.R", "Wind")], na.rm = TRUE))
str(split(x, list(f1, f2)))
後面的list可以是多種factor集合
str(split(x, list(f1, f2), drop = TRUE)) 會丟掉空白的empty level
mapply 用在很像是多重的lapply, sapply
但是是可以多重的使用function, 此function可以return list
可以在此function的argument打 vector形式
list(rep(1, 4), rep(2, 3), rep(3, 2), rep(4, 1))
會等於
mapply(rep, 1:4, 4:1)
試試 mapply(rep, 1:4, 9:6)
[[1]]
[1] 1 1 1 1 1 1 1 1 1
[[2]]
[1] 2 2 2 2 2 2 2 2
[[3]]
[1] 3 3 3 3 3 3 3
[[4]]
[1] 4 4 4 4 4 4
If you want to use (copy, paste or quote) my original article, please contact me through email. (autek.roy@gmail.com) If there is any mistake or comment, please let me know. :D
如要使用(複製貼上或轉載)作者原創文章, 請來信跟我聯絡。(autek.roy@gmail.com) 如果有發現任何的錯誤與建議請留言或跟我連絡。 : )
沒有留言:
張貼留言
請留下您的任何想法或建議!
Please leave any thought or comment!