Converta vários SpatialPointsDataFrames em raster

9

Existem 100 SpatialPointsDataFrames no meu Espaço de Trabalho. Carreguei-os desta maneira:

filenames <- list.files(path="",
                        pattern="XYhectareTravelTimes_ez+.*shp")

for(i in filenames){
              filepath <- file.path("/",i)
              assign(i, readShapePoints(filepath))

Eles são chamados assim:

XYhectareTravelTimes_ez10.*shp 
XYhectareTravelTimes_ez11.*shp 
XYhectareTravelTimes_ez12.*shp 

etc.

Como posso convertê-los em rasters que percorrem o espaço de trabalho?

Eu sou um usuário R muito novo e espero encontrar alguma ajuda. Muito obrigado.

Tridente
fonte
11
Editar seu post para especificar se os seus pontos estão em uma grade regular ou se precisar de interpolação
Etienne Racine

Respostas:

9

Se seus dados contiverem dados xyz (onde z é o valor de varredura) e seus pontos estiverem em uma grade regular (sem necessidade de interpolação).

library("raster")
r <- rasterFromXYZ(as.data.frame(travel)[, c("x", "y", "z")])

Se você precisar de interpolação, poderá usar a biblioteca do akima:

library("raster")
library("akima")

steps <- 100
isu <- with(travel@data, interp(x, y, z, 
    xo=seq(min(x), max(x), length = steps),
    yo=seq(min(y), max(y), length = steps)
))

r <- raster(isu)

Agora, para fazer isso sequencialmente, você só precisa envolvê-lo em um forloop (tentei ficar o mais próximo possível das informações que você forneceu na sua pergunta):

library("raster")

filenames <- list.files(path="", pattern="XYhectareTravelTimes_ez+.*shp")

# create a container for all the rasters
raster_cat <- list()

for (i in filenames) { 
  travel <- readShapePoints(i)
  r <- rasterFromXYZ(as.data.frame(travel)[, c("x", "y", "z")])
  raster_cat[[i]] <- r
}
Etienne Racine
fonte
Eu aconselho a não usar travel@data(ou usar @), pois isso depende dos nomes internos de a SpatialPointsDataFrame, que podem mudar. Sugiro usar as.data.frame, que não depende desses nomes internos.
Paul Hiemstra 15/10/12
Bom ponto. Eu mudei isso. Gosto do uso do slot porque é mais compacto, mas você está certo.
Etienne Racine
5

Além da resposta de @ Etiennebr, eu usaria um loop de estilo apply (que é mais R-ish e usa menos código para a mesma coisa):

library("raster")

filenames <- list.files(path="", pattern="XYhectareTravelTimes_ez+.*shp")

raster_cat = lapply(filenames, function(x) {
  travel <- as.data.frame(readShapePoints(x))
  r <- rasterFromXYZ(travel[, c("x", "y", "z")])
})
Paul Hiemstra
fonte
Hoi Paul, muito obrigado pela resposta !! Seu método é muito mais fácil do que o que eu descobri. Se você estiver interessado no meu método, deixe-me saber. Atenciosamente, Livia