2
votes

Comment puis-je compter le nombre de rasters dans une liste de pile de raster

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)))))


0 commentaires

4 Réponses :


0
votes

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.


3 commentaires

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.



1
votes

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)


0 commentaires

2
votes

Une façon de procéder est la suivante:

# count sum rasters
n <- Reduce(`+`, lapply(r.lst, nlayers))
n
#[1] 12


0 commentaires

1
votes

Que diriez-vous de:

sum(sapply(r.lst, dim)[3, ])
# [1] 12

ou

sum(sapply(r.lst, nlayers))
# [1] 12


0 commentaires