Разместите несколько шейп-файлов на одной странице, используя spplot - PullRequest
0 голосов
/ 14 января 2019

Вот как я строю несколько растров

library(raster)
x <- raster::getData('worldclim', var='tmin', res = 10)
var.list <- c("tmin1","tmin2","tmin3","tmin4")

ras.stack <- stack()

for(i in var.list){

  stack.list <- stack(stack.list, x[[paste0(i)]])
}

spplot(stack.list)

Я хочу сделать то же самое для 4 файлов фигур, которые имеют общий атрибут называется «среднее значение»

fra <- raster::getData('GADM',country = 'FRA', level = 2)
shp.stack <- stack()

for(i in 1:4){
  mean.value <- data.frame(NAME_2  = fra@data$NAME_2, sample(1:200, 96))

  my.shp <- merge(fra, mean.value, by = 'NAME_2') 
  shp.stack <- stack(shp.stack, my.shp)
}

Ошибка в sapply (x, fromDisk) и sapply (x, inMemory): операции возможны только для числовых, логических или сложных типов

Как я могу это исправить?

1 Ответ

0 голосов
/ 22 января 2019

Вы должны сначала преобразовать SpatialPolygonsDataFrame в растр объект, чтобы иметь возможность его сложить. Вы также можете преобразовать в SpatialGrid *, SpatialPixels * - объекты, основанные на руководстве raster::stack.

Итак, ваш второй код станет примерно таким:

library(raster)
fra <- raster::getData('GADM',country = 'FRA', level = 2)
shp.stack <- stack()
for(i in 1:4){
  mean.value <- data.frame(NAME_2  = fra@data$NAME_2, sample(1:200, 96))
  my.shp <- raster::merge(fra, mean.value, by = 'NAME_2')

  r <- raster(ncol=180, nrow=180)
  extent(r) <- extent(my.shp)
  rp <- rasterize(x = my.shp, y = r)

  shp.stack <- raster::stack(shp.stack, rp)
}

plot(shp.stack)

enter image description here

...