Как устранить ошибку R растровой мозаики: «данные» должны быть векторного типа, было «NULL»? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть список растров разных размеров, но с одинаковыми размерами и разрешением.Я пытаюсь объединить их в мозаику, чтобы создать один растр, так как мне приходится вычислять евклидово расстояние, и это не имеет смысла, когда они фрагментированы.Я читал другие вопросы о растровой мозаике (например, добавление names(ras_list)<-NULL и ras_list <- ras_list[lapply(ras_list,length)>0]), но продолжаю получать сообщение

"Ошибка в матрице (unlist (ini), ncol = 2, byrow = TRUE): «данные» должны быть векторного типа, было «NULL». Вызовы: do.call ... .rasterObjectFromFile -> .rasterFromRasterFile -> readIniFile -> matrix "

Мой фрагмент кода:

library(raster)
library(rgdal)
rnames<-list.files(path=".", pattern="*.tif")
ras_list<-list()
for (i in 1:length(rnames)){
  ras_list[[i]]<-raster(rnames[i])
}
names(ras_list) <- NULL
ras_list$fun <- mean
ras_list <- ras_list[lapply(ras_list,length)>0]
rast_mosaic <- do.call(mosaic,ras_list)
writeRaster(rast_mosaic, filename="ALL_00N.tif", format="GTiff", overwrite=TRUE)

выполнение typeof (ras_list [[i]]) возвращает S4 для каждого.Спасибо.

РЕДАКТИРОВАТЬ: добавление dput (ras_list [[1]]):

new("RasterLayer"
    , file = new(".RasterFile"
    , name = "[hidden]/output_00N_000E_010E.tif"
    , datanotation = "FLT4S"
    , byteorder = "little"
    , nodatavalue = -Inf
    , NAchanged = FALSE
    , nbands = 1L
    , bandorder = "BIL"
    , offset = 0L
    , toptobottom = TRUE
    , blockrows = 1L
    , blockcols = 72001L
    , driver = "gdal"
    , open = FALSE
)
    , data = new(".SingleLayerData"
    , values = logical(0)
    , offset = 0
    , gain = 1
    , inmemory = FALSE
    , fromdisk = TRUE
    , isfactor = FALSE
    , attributes = list()
    , haveminmax = TRUE
    , min = 0
    , max = 100
    , band = 1L
    , unit = ""
    , names = "output_00N_000E_010E"
)
    , legend = new(".RasterLegend"
    , type = character(0)
    , values = logical(0)
    , color = logical(0)
    , names = logical(0)
    , colortable = logical(0)
)
    , title = character(0)
    , extent = new("Extent"
    , xmin = -0.000138889
    , xmax = 20.000138889
    , ymin = -10.000138889
    , ymax = 0.000138889
)
    , rotated = FALSE
    , rotation = new(".Rotation"
    , geotrans = numeric(0)
    , transfun = function () 
NULL
)
    , ncols = 72001L
    , nrows = 36001L
    , crs = new("CRS"
    , projargs = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"
)
    , history = list()
    , z = list()
)

1 Ответ

0 голосов
/ 15 декабря 2018

Где именно это происходит?Это выглядит при чтении входного файла (но не файла TIF).Я предполагаю, что вы указали неверное имя файла.Я изменил аргумент на list.files, чтобы исправить это, и сделал несколько других предложений.

library(raster)
library(rgdal)
rnames <- list.files(path=".", pattern="\\.tif$")
ras_list <- lapply(rnames, raster)
names(ras_list) <- NULL
ras_list$fun <- mean
ras_list$filename="ALL_00N.tif"
ras_list$overwrite = TRUE
rast_mosaic <- do.call(mosaic,ras_list)

Если это не поможет, пожалуйста, покажите, где именно это происходит.Если он находится в lapply, то вам следует вернуться к имеющемуся циклу, чтобы увидеть, какой файл является виновником.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...