J'ai une liste
de piles de raster
que chaque pile de raster contient un nombre inégal de rasters. Comment puis-je résumer le nombre de rasters dans ma liste? J'ai essayé length ()
mais cela ne renvoie que le nombre de piles dans ma liste!
exemple de données:
library(raster) #reproducible example set.seed(987) #our list of rasters r.lst <- as.list(1:3) # setting up list pf raster stacks r1 <- raster(nrows = 1, ncols = 1, res = 0.5, xmn = -1.5, xmx = 1.5, ymn = -1.5, ymx = 1.5, vals = runif(36, 1, 5)) r.lst[[1]] <- stack(lapply(1:7, function(i) setValues(r1,runif(ncell(r1))))) r.lst[[2]] <- stack(lapply(1:3, function(i) setValues(r1,runif(ncell(r1))))) r.lst[[3]] <- stack(lapply(1:2, function(i) setValues(r1,runif(ncell(r1)))))
4 Réponses :
Sans données minimales, il est difficile de répondre
< EDIT
Avec les données d'exemple, @ Où est ma serviette a la bonne réponse
somme (unlist (lapply (r.lst, nlayers)))
Pensez à consulter ce post pour savoir comment pour faire un bon exemple reproductible pour les questions futures.
Cela me donne une erreur. Par exemple, les données sont: 3 arguments passés à 'length' ce qui nécessite 1
Corrigé. Merci d'avoir inclus l'exemple.
Merci @RomainB. Je pensais que cela n'avait vraiment pas besoin de données d'exemple car c'était une question simple. Mais j'ai maintenant de bien meilleures solutions.
Vous pouvez utiliser nlayers
pour obtenir le nombre de couches (rasters) dans une pile et lapply
pour appliquer cette fonction à chaque élément de votre liste:
sum(unlist(lapply(my.list.of.rasterstacks, nlayers)))
Pour les résumer:
lapply(my.list.of.rasterstacks, nlayers)
Une façon de procéder est la suivante:
# count sum rasters n <- Reduce(`+`, lapply(r.lst, nlayers)) n #[1] 12
Que diriez-vous de:
sum(sapply(r.lst, dim)[3, ]) # [1] 12
ou
sum(sapply(r.lst, nlayers)) # [1] 12