いつも、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) で戻り値の型を指定できるらしい。どういうご利益があるのかは未確認。