Суть моей проблемы заключается в том, что я хочу минимизировать количество раз, необходимое для преобразования объекта между форматом sp (то есть SpatialPixelsDataFrame) и форматом Raster *.
Задача состоит в следующем: я начинаю со списка объектов SPixDF (поскольку это выходные данные внешней функции, над которыми я не имею контроля), и мне нужно сделать с ними две вещи.
Мне нужно объединить их в один объект. Решение должно быть обобщаемым (то есть обрабатывать списки различной длины). В принципе, я не могу найти способ сделать raster :: calc () с объектами SPixDF.
Причина, по которой мне нужно решение для # 1, заключается в том, что следующим шагом является наложение точек на результирующую усредненную поверхность SPixDF (т.е. sp :: over). И sp :: over () не может наложить данные SpatialPoints на данные в формате Raster *.
## Data set-up ##
# grid data
data(meuse.grid)
coordinates(meuse.grid) = ~x+y
proj4string(meuse.grid) <- CRS("+init=epsg:28992")
gridded(meuse.grid) = TRUE
spplot(meuse.grid)
meuse.grid.list <- list(meuse.grid, meuse.grid, meuse.grid)
# point data
data(meuse)
coordinates(meuse) = ~x+y
proj4string(meuse) <- CRS("+init=epsg:28992")
### Analysis steps (involving 2 conversions) ###
# Convert listed SPixDF to listed RasterLayer
meuse.raster.list <- lapply(meuse.grid.list, function(x) raster(x, layer=5, values=T))
meuse.raster.stack <- stack(meuse.raster.list) # list of RasterLayers to RasterStack
# task #1
meuse.cmbnd <- calc(meuse.raster.stack, mean) # average together individual rasters
# Convert back to SPixDF
meuse.cmbnd.spdf <- as(meuse.cmbnd, "SpatialPixelsDataFrame")
# task #2
# overlay points on SPixDf grid
Result <- over(meuse, meuse.cmbnd.spdf)
Если бы sp :: over () мог обрабатывать растровые * объекты, я бы просто преобразовал исходный объект один раз (в растровый *) и выполнил шаги 1 и 2 в этом формате. По сути, проблема в том, что я не могу найти ОБЩИЙ СПОСОБ выполнить оба шага в одном и том же формате (sp или Raster).
Если вы думаете о чем-либо, я был бы очень благодарен!
P.S. Основанием для этого является то, что эта операция в настоящее время написана в функции, над которой я работаю, и я пытаюсь ускорить ее. Но поскольку я должен продолжать переключаться между классами sp и Raster, решение, которое я имею, становится медленнее, чем существующая формулировка.