/ / lapply funciona sobre una matriz o un solo elemento? - matrices, r, lista, vector

¿lapply funciona sobre una matriz o un solo elemento? - arrays, r, list, vector

Estoy un poco confundido en cuanto a si el lapply funciona en una lista o en un vector. Vea los dos ejemplos a continuación.

  1. Aquí, la función media se aplica sobre una matriz de números, es decir, de 1 a 5

    x = list(a=1:5, b=rnorm(10))
    x
    
    #$a
    #[1] 1 2 3 4 5
    #
    #$b
    #[1] -0.57544290  0.51035240  0.43143241 -0.97971957 -0.99845378
    #[6]  0.77389008 -0.08464382  0.68420547  1.64793617 -0.39688809
    
    lapply(x,mean)
    #$a
    #[1] 3
    #
    #$b
    #[1] 0.1012668
    
  2. Pero aquí, la función Runif se aplica sobre cada elemento individual de la matriz.

    x = 1:4
    
    lapply(x,runif)
    #[[1]]
    #[1] 0.5914268
    
    #[[2]]
    #[1] 0.6762355 0.3072287
    
    #[[3]]
    #[1] 0.8439318 0.8488374 0.1158645
    
    #[[4]]
    #[1] 0.8519037 0.8384169 0.2894639 0.4066553
    

Mi pregunta es, ¿en qué funciona exactamente el lapply? una matriz o un elemento individual? ¿Y cómo lo elige correctamente dependiendo de la función?

Respuestas

4 para la respuesta № 1

lapply trabajará en el nivel más alto que defina la estructura del objeto R.

Si tengo 4 enteros individuales, lapply trabajará en cada número entero:

x <- 1:4

lapply(x, identity)
#[[1]]
#[1] 1
#
#[[2]]
#[1] 2
#
#[[3]]
#[1] 3
#
#[[4]]
#[1] 4

Sin embargo si tengo un list de longitud == 2 cada una contiene 2 valores, lapply Trabajará en cada objeto de lista.

x <- list(1:2,3:4)
lapply(x, identity)
#[[1]]
#[1] 1 2
#
#[[2]]
#[1] 3 4