2017-07-25 3 views
0

J'ai deux grandes images raster (30 000 x 30 000), une pour l'année 2000 et une autre pour 2005. Je veux remplacer les pixels par NA dans le raster 2000 par leurs valeurs non-NA respectives du raster 2005. Voici un exemple:Comment remplacer NA dans un grand raster avec des valeurs d'un autre raster dans R?

r1 <- raster(ncols=36, nrows=18) 
r1[] <- 1:ncell(r1) 
plot(r1) 
r2 <- raster(ncols=36, nrows=18) 
r2[] <- 1:ncell(r2) 
r2[r2<300] <- NA 
plot(r2) 

Dans cet exemple, je voudrais remplacer des AN dans « r2 » par leurs valeurs respetive dans « r1 ». J'ai essayé la commande « couverture() » dans R, mais que l'on ne complète pas « r2, » plutôt retourne l'info qui manque dans « r2 » mais présent dans « r1 »:

r2.fix <- cover(r2, r1) 
plot(r2.fix) 

Toutes les idées sur comment le travail est-il fait? Merci d'avance.

MISE À JOUR: Le problème avec cette solution:

r2[is.na(r2)] <- r1[is.na(r2)] 

Est-ce qu'il ne fonctionne pas avec de grandes rasters. R renvoie l'erreur suivante:

Error: cannot allocate vector of size 2.6 Gb 
In addition: Warning messages: 
1: In order(cells[, 2]) : 
    Reached total allocation of 16080Mb: see help(memory.size) 
+0

Si vos rasters sont trop gros, consultez ce [Guide] (https://cran.r-project.org/web/packages/raster/vignettes/functions.pdf) sur fonctions d'écriture pour les grands rasters, en particulier le traitement en bloc – Val

Répondre

1

Je ne peux reproduire votre problème qu'avec une grande trame.
J'ai Erreur: impossible d'allouer un vecteur de taille 6.7 Gb avec 16 Go de RAM.
Vous devez modifier le chunksize dans les options de session .

From Introduction to the ’raster’ package

The options chunksize and maxmemory determine the maximum size (in number of cells) of a single chunk of values that is read/written in chunk-by-chunk processing of very large files.

+0

Merci Arkaiy, votre approche fonctionnerait avec les petits rasters, mais avec les grands, cette solution se heurte à des problèmes de mémoire. Voici ce que j'ai obtenu: Erreur: impossible d'allouer un vecteur de taille 2,6 Gb En outre: Messages d'avertissement: 1: Dans l'ordre (cellules [, 2]): Atteint allocation totale de 16080Mb: voir aide (memory.size) –

+0

Vous devez modifier la taille de segment dans les options de session. –