我正在尝试合并R中的一些多波段卫星图像(遗憾的是,由于版权问题,我无法分享这些图像)。它们具有相同的尺寸和分辨率,它们之间略有重叠。当我单独导入每个图像并合并它们时,没有问题:
library(raster)
raster1 <- brick("path/multi-band-raster1")
raster2 <- brick("path/multi-band-raster2")
raster3 <- brick("path/multi-band-raster3")
raster4 <- brick("path/multi-band-raster4")
raster5 <- brick("path/multi-band-raster5")
merged_scene <- merge(raster1, raster2, raster3, raster4, raster5)
但是,我的目标是使我的代码尽可能灵活,以便我可以将其重新应用于不同的图像集。为此,我将栅格加载为列表,然后使用do.call()
函数,以便merge
函数获取表示列表中栅格砖的所有参数:
folder <- paste0(getwd(),"/Images-folder/")
list.filenames <- list.files(folder, pattern=".tif$", full.names=FALSE)
list.data <- list()
for (i in 1:length(list.filenames)){
list.data[[i]] <- brick(paste0(folder,list.filenames[i]))
}
names(list.data) <- list.filenames
merged_scene <- do.call(merge, list.data)
然而,当我跑步时,我得到:
Error in as.data.frame(x) : argument "x" is missing, with no default
如果你能看到我出错的地方,请告诉我。非常感谢。
答案 0 :(得分:0)
不要给你的砖块names
。
require(raster)
names(rlist) <- c("foo", "bar", "baz")
merged_scene <- do.call(merge, rlist)
# Error in as.data.frame(x) : argument "x" is missing, with no default
rlist <- list(raster1, raster2, raster3) # no names()
merged_scene <- do.call(merge, rlist)
merged_scene
class : RasterBrick
dimensions : 77, 101, 7777, 3 (nrow, ncol, ncell, nlayers)
resolution : 1, 1 (x, y)
extent : 0, 101, 0, 77 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=merc +datum=WGS84
data source : in memory
names : layer.1, layer.2, layer.3
min values : 0, 0, 0
max values : 255, 255, 255
数据:
raster1 <- brick(system.file("external/rlogo.grd", package="raster"))
raster2 <- brick(system.file("external/rlogo.grd", package="raster"))
raster3 <- brick(system.file("external/rlogo.grd", package="raster"))
rlist <- list(raster1, raster2, raster3)