Je sais que ce sujet est apparu sur SO plusieurs fois, mais les exemples étaient souvent plus compliqués et j'aimerais avoir une réponse (ou un ensemble de solutions possibles) à cette situation simple. Je suis toujours Envelopper ma tête autour de R et de la programmation en général. Donc ici je veux utiliser la fonction lapply
ou une simple boucle vers data
list qui est une liste de trois listes de vecteurs.
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)
Maintenant, je veux obtenir la liste des moyennes pour chaque vecteur. Le résultat serait une liste de trois éléments (listes).
Je sais seulement comment obtenir la liste des résultats pour une liste de vecteurs et
for (i in 1:length(data1)){
means <- lapply(data1,mean)
}
ou par:
lapply(data1,mean)
et je sais obtenir tous les moyens en utilisant rapply
:
rapply(data,mean)
Le problème est que rapply ne maintient pas la structure de la liste. De l'aide et éventuellement quelques conseils/explications seraient très appréciés.
Nous pouvons parcourir la liste des listes avec un lapply/sapply
Imbriqué
lapply(data, sapply, mean)
Il est autrement écrit comme
lapply(data, function(x) sapply(x, mean))
Ou si vous avez besoin de la sortie avec la structure list
, un lapply
imbriqué peut être utilisé
lapply(data, lapply, mean)
Ou avec rapply
, nous pouvons utiliser l'argument how
pour obtenir le type de sortie que nous voulons.
rapply(data, mean, how='list')
Si nous utilisons une boucle for
, nous devrons peut-être créer un objet pour stocker les résultats.
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]])
}
}