R の lapply と sapply: 違いは何ですか?
R のlagply()関数を使用すると、リスト、ベクトル、またはデータ フレームの各要素に関数を適用し、それに応じてリストを取得できます。
sapply()関数は、リスト、ベクトル、またはデータ フレームの各要素に関数を適用するために使用することもできますが、結果としてベクトルを返します。
次の例は、R でこれらの関数をそれぞれ使用する方法を示しています。
例: R で apply() を使用する方法
次のコードは、 lapply()関数を使用して、データ フレームの各列の各値を 2 で乗算する方法を示しています。
#create data frame df <- data. frame (x=c(1, 2, 2, 3, 5), y=c(4, 4, 6, 7, 8), z=c(7, 7, 9, 9, 9)) #view data frame df X Y Z 1 1 4 7 2 2 4 7 3 2 6 9 4 3 7 9 5 5 8 9 #multiply each value in each column by 2 lapply(df, function (df) df*2) $x [1] 2 4 4 6 10 $y [1] 8 8 12 14 16 $z [1] 14 14 18 18 18
結果はリストであることに注意してください。
例: R で sapply() を使用する方法
次のコードは、 sapply()関数を使用して、データ フレームの各列の各値を 2 で乗算する方法を示しています。
#create data frame df <- data. frame (x=c(1, 2, 2, 3, 5), y=c(4, 4, 6, 7, 8), z=c(7, 7, 9, 9, 9)) #view data frame df X Y Z 1 1 4 7 2 2 4 7 3 2 6 9 4 3 7 9 5 5 8 9 #multiply each value in each column by 2 sapply(df, function (df) df*2) X Y Z [1,] 2 8 14 [2,] 4 8 14 [3,] 4 12 18 [4,] 6 14 18 [5,] 10 16 18
結果はベクトル行列であることに注意してください。
as.data.frame()を使用すると、行列の代わりにデータ フレームを返すことができることに注意してください。
#multiply each value in each column by 2 and return a data frame as. data . frame (sapply(df, function (df) df*2)) X Y Z 1 2 8 14 2 4 8 14 3 4 12 18 4 6 14 18 5 10 16 18
lagply() または sapply() を使用する場合
ベクトルまたは行列を返す方が合理的であるため、99% の場合はsapply()を使用します。
ただし、まれに、結果をリストにしたい場合は、代わりにラップリー()を使用する必要がある場合があります。
sapply()とlagpy() は、ベクトル、行列、またはデータ フレームに対して同じ演算を実行することに注意してください。唯一の違いは、返されるオブジェクトのクラスです。
追加リソース
R の各データ フレーム行に関数を適用する方法
RでcolSums()関数を使用する方法
R で rowSums() 関数を使用する方法