2017-01-17 1 views
1

Je suis en train de suivre le code pour construire un modèle de autocovariate résiduel décrit ici: https://github.com/jejoenje/PubsRexamples/blob/master/Crase_etal.R#L16erreur dans l'attribution de valeurs à raster en R

Après avoir créé un grand espace de trame, je reçois une erreur lors de l'attribution des valeurs à la trame. J'ai 1000 points aléatoires pour signer sur le raster, donc il y a beaucoup de points sans données (NA). Des idées?

head(xy) 
     [,1] [,2] 
[1,] 543510.0 6968620 
[2,] 543570.0 6968620 
[3,] 543570.0 6968560 
[4,] 543599.9 6968560 
[5,] 543510.0 6968530 
[6,] 543389.9 6968470 


head(xy_residuals) 
     [,1] [,2]  [,3] 
1 543510.0 6968620 -0.4257671 
2 543570.0 6968620 -0.4541684 
3 543570.0 6968560 -0.4310492 
4 543599.9 6968560 -0.4649595 
5 543510.0 6968530 -0.5506348 
6 543389.9 6968470 -0.4928708 

summary(xy) 
      X    Y 
Min. :538800 Min. :6931480 
1st Qu.:540480 1st Qu.:6932860 
Median :541350 Median :6935320 
Mean :541529 Mean :6943218 
3rd Qu.:542670 3rd Qu.:6954003 
Max. :544290 Max. :6968620 

# Define raster ymn, ymx, xmn and xmx from coordinates 
# ncol=xmx-xmn nrow=ymx-ymn. 

rast <- raster(ncol = 5490, nrow = 37140, ymn = 6931480, ymx = 6968620, 
       xmn = 538800, xmx = 544290) 
rast 

class  : RasterLayer 
dimensions : 37140, 5490, 203898600 (nrow, ncol, ncell) 
resolution : 1, 1 (x, y) 
extent  : 538800, 544290, 6931480, 6968620 (xmin, xmax, ymin, ymax) 
coord. ref. : NA 

appel problématique:

rast[cellFromXY(rast, xy)] <- xy_residuals[, 3] 

erreur dans .replace (x, i = i, = valeur, recyclage = 1): ne peut pas remplacer des valeurs dans les gros objets raster si leur longueur n'est pas 1 ou le nombre de cellules à remplacer **

+1

Les longueurs de 'cellFromXY (rast, xy)' et 'xy_residuals [, 3]' correspondent-elles? –

+0

Oui. Les deux xy et xy_residuals ont 1000 lignes – John

+0

Je suis à court d'idées. À ce stade, ce serait génial si vous pouviez fournir un exemple reproductible (qui est facile à copier/coller). –

Répondre

2

Le message d'erreur indique pourquoi cela se produit (mais peut-être que cette "fonctionnalité" a besoin d'être améliorée.) Le raster est très grand d peut ne pas tenir en mémoire (RAM). C'est peut-être une évaluation trop conservatrice. Vous pouvez régler que par rasterOptions ou vous pouvez essayer:

library(raster) 
r <- raster(ncol = 10, nrow = 10, ymn = 6931480, ymx = 6968620, xmn = 538800, xmx = 544290) 
m <- matrix(c(539868,542002,542409,6945031,6940012,6935997, 1, 2, 3), 3, 3)  
cells <- cellFromXY(r, m[,1:2]) 

# create a large vector with all cells 
v <- rep(NA, ncell(r)) 
v[cells] <- m[,3] 
v <- setValues(r, v) 

Si cela ne fonctionne pas, vous pouvez regarder update, mais qui est plus risquée car elle écrasera les données dans le dossier, mais cela ne devrait pas être une préoccupation ce cas.

r <- setValues(r, NA) 
# that probably creates a file on disk. If not do 
# r <- writeRaster(r, filename='test.grd') 

r <- update(r, cell=cells, v=m[,3]) 
+0

Merci, j'ai trouvé cela très utile avec un problème similaire – Bart