Ошибка при использовании do.call для объединения многоканальных спутниковых растровых изображений в RStudio - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь объединить некоторые многоканальные спутниковые изображения в 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

Пожалуйста, дайте мне знать, если вы видите, где я ошибся.Большое спасибо.

1 Ответ

0 голосов
/ 21 мая 2018

Не отдавайте 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)
...