Lapply vs sapply w r: jaka jest różnica?


Funkcji lapply() w R można użyć do zastosowania funkcji do każdego elementu listy, wektora lub ramki danych i uzyskania odpowiedniej listy .

Funkcji sapply() można także użyć do zastosowania funkcji do każdego elementu listy, wektora lub ramki danych, ale w rezultacie zwraca ona wektor .

Poniższe przykłady pokazują, jak używać każdej z tych funkcji w języku R.

Przykład: Jak używać Apply() w R

Poniższy kod pokazuje, jak używać funkcji lapply() do pomnożenia każdej wartości w każdej kolumnie ramki danych przez 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

Pamiętaj, że wynikiem jest lista.

Przykład: Jak używać sapply() w R

Poniższy kod pokazuje, jak używać funkcji sapply() do pomnożenia każdej wartości w każdej kolumnie ramki danych przez 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

Należy pamiętać, że wynikiem jest macierz wektorowa.

Pamiętaj, że możesz użyć funkcji as.data.frame() do zwrócenia ramki danych zamiast macierzy:

 #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

Kiedy używać lapply() lub sapply()

W 99% przypadków użyjesz sapply() , ponieważ bardziej sensowne jest zwrócenie wektora lub macierzy.

Jednak w rzadkich przypadkach może być konieczne użycie funkcji lapply(), jeśli chcesz, aby wynikiem była lista.

Zauważ, że sapply() i lappy() wykonują te same operacje na wektorze, macierzy lub ramce danych. Jedyna różnica dotyczy klasy zwracanego obiektu.

Dodatkowe zasoby

Jak zastosować funkcję do każdego wiersza ramki danych w R
Jak korzystać z funkcji colSums() w R
Jak korzystać z funkcji rowSums() w R

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *