2017-01-17 3 views
1

Я пытаюсь следовать коду для построения модели остаточного autocovariate описанной здесь: https://github.com/jejoenje/PubsRexamples/blob/master/Crase_etal.R#L16Ошибки при присвоении значений растра в R

После создания большого растрового пространства, я получаю сообщение об ошибке при присвоении значений растра. У меня есть 1000 случайных точек для подписи к растру, поэтому есть много точек без данных (NA). Есть идеи?

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 

Проблематичный вызова:

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

Ошибка в .Надеть (х, I = I, = значение, рециркулирующий = 1): не могут заменить значения в больших объектов Растровые, если их длина не является 1 или количеством заменяемых ячеек **

+1

Должны ли длины 'cellFromXY (раст, xy)' и 'xy_residuals [, 3]' соответствовать? –

+0

Да. И xy, и xy_residuals имеют 1000 строк. – John

+0

У меня нет идей. На этом этапе было бы здорово, если бы вы могли предоставить воспроизводимый пример (который легко скопировать/вставить). –

ответ

2

В сообщении об ошибке говорится, почему это происходит (но, возможно, эта «функция» нуждается в некотором улучшении.) Растр очень большой d может не помещаться в память (ОЗУ). Это может быть слишком консервативной оценкой. Вы можете настроить это через rasterOptions или вы можете попробовать:

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) 

Если это не работает, вы можете посмотреть на update, но это более рискованно, как он переписывает данные о файле, но это не должно быть проблемой в Это дело.

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

Спасибо, я нашел это очень полезным с аналогичной проблемой – Bart

Смежные вопросы