Diferencia entre lapply() VS sapply() en R

Una lista en lenguaje de programación R se puede pasar como argumento en las funciones lapply() y sapply() . Es bastante útil realizar algunas de las operaciones generales como el cálculo de la suma, la suma acumulada, la media, etc. de los elementos de los objetos contenidos en una lista.   

laply()

El uso del bucle «for» en R para iterar sobre una lista o un vector requiere mucha memoria y también es bastante lento. Y cuando se trata de manejar grandes conjuntos de datos e iterarlos, no se recomienda for loop. R proporciona muchas alternativas para aplicar a las listas para operaciones de bucle que son muy útiles cuando se trabaja de forma interactiva en una línea de comandos. La función lapply() es una de esas funciones y se usa para aplicar una función sobre una lista.

Sintaxis: lapply(Lista, Operación)

Argumentos:

  • Lista: lista que contiene una serie de objetos
  • Operación:longitud, suma, media y cumsum

Valor devuelto : Devuelve un valor numérico

La función lapply() se usa con una lista y realiza las siguientes operaciones:

  • lapply(Lista, longitud): Devuelve la longitud de los objetos presentes en la lista, List.
  • lapply(Lista, suma): Devuelve la suma de los elementos que tienen los objetos en la lista, Lista.
  • lapply(Lista, media): Devuelve la media de los elementos que tienen los objetos en la lista, List.
  • lapply(Lista, cumsum): Devuelve la suma acumulada de elementos que tienen los objetos presentes dentro de la lista, Lista.

aplicar()

Esta función también se usa para aplicar una función sobre una lista pero con resultados simplificados. 

Sintaxis: sapply(Lista, Operación)

Argumentos:

  • Lista: lista que contiene una serie de objetos
  • Operación: longitud, suma, media y cumsum

Valor devuelto : Devuelve un valor numérico

La función lapply() se usa con una lista y realiza operaciones como:

  • sapply(Lista, longitud): Devuelve la longitud de los objetos presentes en la lista, List.
  • sapply(Lista, suma): Devuelve la suma de los elementos que tienen los objetos en la lista, Lista.
  • sapply(Lista, media): Devuelve la media de los elementos contenidos en los objetos de la lista, Lista.
  • sapply(Lista, cumsum): Devuelve la suma acumulada de elementos que tienen los objetos presentes dentro de la lista, Lista.

Diferencia entre las funciones lapply() y sapply(): 

La función lapply() muestra la salida como una lista, mientras que la función sapply() muestra la salida como un vector . Las funciones lapply() y sapply() se utilizan para realizar algunas operaciones en una lista de objetos. La función sapply() en R es más eficiente que lapply() en la salida devuelta porque sapply() almacena valores directamente en un vector. 

Ejemplo 1:  la función lapply() devuelve la salida como una lista, mientras que la función sapply() devuelve la salida como un vector

R

print("Operations using lapply() function: ")
 
# Initializing list1
# list1 have three objects a, b, and c
# and they all are numeric objects (same data type)
list1 <- list(a = 1: 20, b = 25:30, c = 40:60)
 
# Printing the length of list1 objects
lapply(list1, length)
 
# Printing the sum of elements present in the
# list1 objects
lapply(list1, sum)
 
# Printing the mean of elements present in the
# list1 objects
lapply(list1, mean)
 
# Printing the cumulative sum of elements
# present in the list1 objects
lapply(list1, cumsum)
 
print("Operations using sapply() function: ")
 
 
# Initializing list2
# list2 have three objects a, b, and c
# and they all are numeric objects (same data
# type)
list2 <- list(a = 1: 20, b = 25:30, c = 40:60)
 
# Printing the length of list2 objects
sapply(list2, length)
 
# Printing the sum of elements
# present in the list2 objects
sapply(list2, sum)
 
# Printing the mean of elements
# present in the list2 objects
sapply(list2, mean)
 
# Printing the cumulative sum
# of elements present in the list2 objects
sapply(list2, cumsum)

Producción: 

Ejemplo 2: como puede ver en la salida, la función lapply() devuelve la salida como una lista, mientras que la función sapply() devuelve la salida como un vector. 

R

print("Operations using lapply() function: ")
 
 
# Initializing list1
# list1 have three objects a, b, and c
# and they all are numeric objects (same data type)
list1 <- list(a=11: 12, sample(c(1, 2, 5, 3),
                               size=4, replace=FALSE),
              c=40: 60)
 
# Printing the length of list1 objects
lapply(list1, length)
 
# Printing the sum of elements present in the
# list1 objects
lapply(list1, sum)
 
# Printing the mean of elements present in the
# list1 objects
lapply(list1, mean)
 
# Printing the cumulative sum of elements present
# in the list1 objects
lapply(list1, cumsum)
 
print("Operations using sapply() function: ")
 
# Initializing list2
# list2 have three objects a, b, and c
# and they all are numeric objects (same data type)
list2 <- list(a=11: 12, sample(c(1, 2, 5, 3),
                               size=4, replace=FALSE),
              c=40: 60)
 
# Printing the length of list2 objects
sapply(list2, length)
 
# Printing the sum of elements
# present in the list2 objects
sapply(list2, sum)
 
# Printing the mean of elements
# present in the list2 objects
sapply(list2, mean)
 
# Printing the cumulative sum of
# elements present in the list2 objects
sapply(list2, cumsum)

Producción:

Ejemplo 3: podemos usar objetos no numéricos también en una lista, pero después de aplicar operaciones como «media» en la lista, obtenemos el resultado » NA» en la salida, ya que estas operaciones solo funcionan para objetos numéricos.

R

print("Operations using lapply() function: ")
 
# Initializing list1
# list1 have three objects a, b, and c
# and they all are numeric objects
# (same data type)
list1 <- list(a = 11: 12, b = c('Geeks', 'for', 'Geeks'),
              c = 40:60)
 
# Printing the length of list1 objects
lapply(list1, length)
 
# Printing the mean of elements
# present in the list1 objects
lapply(list1, mean)
 
print("Operations using sapply() function: ")
 
# Initializing list2
# list2 have three objects a, b, and c
# and they all are numeric objects (same data type)
list2 <- list(a = 11: 12, b = c('Geeks', 'for', 'Geeks'),
              c = 40:60)
 
# Printing the length of list2 objects
sapply(list2, length)
 
# Printing the mean of elements
# present in the list2 objects
sapply(list2, mean)

Producción:

Las funciones lapply() y sapply() imprimen NA para el objeto b en list1 ya que b es un objeto no numérico. El compilador R da una advertencia cada vez que aplicamos estas operaciones en una lista que contiene una cantidad de objetos no numéricos.

Devolver la salida como una lista usando la función sapply()

La función sapply() acepta un tercer argumento mediante el cual podemos devolver la salida como una lista en lugar de un vector.

Sintaxis: sapply(Lista, Operación, simplificar = FALSO)

Argumentos:

  • Lista: lista que contiene una serie de objetos
  • Operación: longitud, suma, media y cumsum
  • simplificar = FALSO: Devuelve la salida como una lista en lugar de un vector

Valor devuelto : Devuelve un valor numérico.

R

print("Operations using sapply() function: ")
 
# list1 have three objects a, b, and c
# and they all are numeric objects (same data type)
list1 <- list(a = 11:12, b = 1:10, c = 40:60)
 
# Printing the length of list1 objects as a list
sapply(list1, length, simplify = FALSE)
 
# Printing the sum of elements present
# in the list1 objects as a list
sapply(list1, sum, simplify = FALSE)
 
# Printing the mean of elements present
# in the list1 objects as a list
sapply(list1, mean, simplify = FALSE)
 
# Printing the cumulative sum of elements
# present in the list1 objects as a list
sapply(list1, cumsum, simplify = FALSE)

Producción:

Como podemos ver en la salida, la función sapply() devuelve la salida como una lista en lugar de un vector. Por lo tanto, siempre podemos usar el tercer argumento de la función sapply() siempre que necesitemos imprimir la salida como una lista en lugar de un vector.  

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *