Función de lapeado/bucles en la lista de listas R
loops lapply (1)
Podemos recorrer la lista de la lista con un lapply/sapply
lapply(data, sapply, mean)
De lo contrario se escribe como
lapply(data, function(x) sapply(x, mean))
O si necesita la salida con la estructura de la list
, se puede usar un lapply
anidado
lapply(data, lapply, mean)
O con rapply
, podemos usar el argumento de how
obtener qué tipo de salida queremos.
rapply(data, mean, how=''list'')
Si estamos utilizando un bucle for
, es posible que debamos crear un objeto para almacenar los resultados.
res <- vector(''list'', length(data))
for(i in seq_along(data)){
for(j in seq_along(data[[i]])){
res[[i]][[j]] <- mean(data[[i]][[j]])
}
}
Sé que este tema apareció en SO algunas veces, pero los ejemplos a menudo eran más complicados y me gustaría tener una respuesta (o un conjunto de posibles soluciones) para esta simple situación. Todavía estoy envolviendo mi cabeza alrededor de R y programando en general. Así que aquí quiero usar la función lapply
o un simple bucle a data
lista de data
que es una lista de tres listas de vectores.
data1 <- list(rnorm(100),rnorm(100),rnorm(100))
data2 <- list(rnorm(100),rnorm(100),rnorm(100))
data3 <- list(rnorm(100),rnorm(100),rnorm(100))
data <- list(data1,data2,data3)
Ahora, quiero obtener la lista de medios para cada vector. El resultado sería una lista de tres elementos (listas).
Solo sé cómo obtener una lista de resultados para una lista de vectores y
for (i in 1:length(data1)){
means <- lapply(data1,mean)
}
o por:
lapply(data1,mean)
y sé cómo obtener todos los medios utilizando rapply
:
rapply(data,mean)
El problema es que rapply no mantiene la estructura de la lista. Ayuda y posiblemente algunos consejos / explicaciones serían muy apreciados.