将光栅图块读入R时出错

时间:2014-02-15 15:45:19

标签: r

在自定义函数中合并光栅图块时出现错误。以下代码每次都有效:

files = list.files("data_folder/")
tiles = list()
for(f in files) tiles = c(tiles, list(raster(readGDAL(paste0(dir,f)), layer=1, values=T)))
ras = do.call(merge, tiles)

但是当我尝试在函数中运行它时:

read_and_merge_rasters = function(dir){
  files = list.files(dir)
  tiles = list()
  for(f in files) tiles = c(tiles, list(raster(readGDAL(paste0(dir,f)), layer=1, values=T)))
  return(do.call(merge, tiles))
}

..它在ok中读取文件(由打印报告确认)但随后失败并显示错误:Error in as.data.frame.default(x) : cannot coerce class "structure("RasterLayer", package = "raster")" to a data.frame

我无法想象调用as.data.frame的位置/原因。知道为什么会这样吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试这种方法(未经测试,因为您没有提供可再现的示例)。

read_and_merge_rasters <- function(dir) {
    library(raster)
    files <- list.files(dir, full.names = TRUE)
    tiles <- lapply(files, raster)
    do.call(merge, tiles)
}

您还检查目录中的不同栅格是否具有可比性(范围,原点和分辨率)。

答案 1 :(得分:1)

有多个合并功能。除非你设置前两个参数的名称,否则do.call会倾向于将它发送到data.frames的合并:

tiles <- lapply(files, raster)
names(tiles)[1:2] <- c('x', 'y')  
x <- do.call(merge, tiles)