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.
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
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 № 1lapply
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