[R] Loop functions — apply family

Min
Becoming a data scientist
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
基本使用方式
可以將 function 的 parameters 傳入

sapply(x, function, …)

  • lapply的功能一樣,但會簡化結果
  • 簡化方式
    1. 結果的 list 中每個元素的長度都為 1 → 回傳 vector
    2. 結果的 list 中每個元素的長度相等(>1) → 回傳 matrix
    3. 不知道怎麼整理 → 回傳list
和上面的 lapply() 執行相同內容,發現結果簡化成 vector

vapply(x, function, FUN.VALUE = type, …)

  • sapply的功能類似,但可以直接指定想要回傳的格式
  • 如果結果無法轉換成指定的格式時,會產生錯誤訊息
直接指定每個元素都是長度為 1 的 numeric

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 執行很多次

--

--