将光栅分幅读取到R时出错

将光栅分幅读取到R时出错,r,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(d

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

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(由打印报告确认)中的文件,但随后失败,错误为:
as.data.frame.default(x)中的错误:
无法将“类”结构(“RasterLayer”,package=“raster”)”强制为data.frame

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

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


读取和合并光栅有多个合并功能。do.call将倾向于将其发送到data.frames的merge,除非设置前两个参数的名称:

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

平铺没有可复制的示例,因此我建议执行
调试(读取和合并光栅)
,调用该函数,然后逐步执行到抛出错误的点。从这一点开始,检查对象,尝试替代方案等。如果将其应用于仅包含geotiff瓷砖的任何文件夹,例如其中一个,则完全可以复制。我会试试你的建议。行实际上是
lappy(文件,函数(i){graster(graster(readGDAL(paste0(dir,i)),layer=1,values=T)}
。代码现在神秘地工作,这是令人困惑的,因为Lappy只替换了部分正常工作的代码(但不那么优雅)。嘿,很高兴它能工作。你能解释一下为什么光栅(readGDAL(dir))
而不是光栅(dir)
?嗯,它最初不适用于光栅,但后来适用于readGDAL。我怀疑我的系统有其他原因。示例应该是可复制的和自包含的:也就是说,数据应该包括在内(生成的或示例数据随R包一起提供)
tiles <- lapply(files, raster)
names(tiles)[1:2] <- c('x', 'y')  
x <- do.call(merge, tiles)