apply, lapply, sapply メモ

いつも、FUN の型がなにか分からなくなってしまうので実験してメモ。

まず、行列に対して処理する場合。

m <- matrix(1:6, 2, 3)
apply(m, 1, function(x) {print(x); return(1)})
apply(m, 2, function(x) {print(x); return(1)})
lapply(m, function(x) {print(x)})
sapply(m, function(x) {print(x)})
vapply(m, function(x) {print(x)}, 1)

apply の FUN は、 vector (行ベクトル or 列ベクトル, 第2引数で指定)を受け取ってスカラを返す関数。FUN は、行数 or 列数回呼び出される。その返り値をまとめたベクトルが apply の返り値。

lapply と sapply の FUN は、スカラを受け取ってスカラを返す関数。要素数回呼び出される。lapply/sapply の返り値はその返り値をまとめたものだが、lapply はリストとして、sapply はベクトルとなる。vapply も同じだが、第3引数(FUN.VALUE) で戻り値の型を指定できるらしい。どういうご利益があるのかは未確認。