[R] Loop functions — apply
family
Published in
Dec 3, 2019
What is Loop functions
- 一些看似具有迴圈的功能,但又沒有實際寫出迴圈的 functions
- 可以讓程式碼更簡潔,執行速度也比較快
包含:
lapply
:將想要執行的 function 套到list
的每個元素中,回傳list
sapply
:和lapply
的功能相同,但會簡化結果vapply
:和sapply
的功能類似,但可以直接指定想要回傳的格式apply
tapply
:把 vector 中的資料按照 factors 分組排好,將 function 套用在每組上mapply
:將一個 function 執行很多次
lapply(x, function, ...)
- 將想要執行的 function 套到
list
的每個元素中 - 永遠都會回傳一個
list
sapply(x, function, …)
- 和
lapply
的功能一樣,但會簡化結果 - 簡化方式
1. 結果的list
中每個元素的長度都為 1 → 回傳vector
2. 結果的list
中每個元素的長度相等(>1) → 回傳matrix
3. 不知道怎麼整理 → 回傳list
vapply(x, function, FUN.VALUE = type, …)
- 和
sapply
的功能類似,但可以直接指定想要回傳的格式 - 如果結果無法轉換成指定的格式時,會產生錯誤訊息
apply(x, MARGIN, function)
- 指定想要被保留的 margin(row or column)
MARGIN = 1 → keep first dimension → 保留 rows
MARGIN = 2→ keep second dimension → 保留 columns - 保留 rows ,可以看成把所有 columns 都壓在一起計算的感覺。反之亦然
tapply
- 把 vector 中的資料按照 factors 分組排好,將 function 套用在每組上
mapply
- 將一個 function 執行很多次