在自定义函数中合并光栅图块时出现错误。以下代码每次都有效:
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
的位置/原因。知道为什么会这样吗?提前谢谢。
答案 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)