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() 関数を使用する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です