Как рассчитать смежность окрестностей в R?
Моя конечная цель - рассчитать количество соединений, используя функцию joincounts.multi()
из пакета R spdep
,
У меня очень большой растровый файл (nrows = 19663, ncols = 34073) с размером ячейки 30 м. Это двоичный растр с двумя значениями, 0 и 1 (и многими ячейками NoData). Это в целочисленном формате.
Сначала мне нужно сгенерировать nb
Объект - это список соседей. Есть различные способы сделать это с этим пакетом. Для данных полигонов используется poly2nb
аргумент. Для ячеек сетки используется cell2nb
аргумент. Очевидно, последний не работает для очень больших растров - он разбивает мой компьютер, и поиск в Google показывает, что у других была такая же проблема.
РЕДАКТИРОВАТЬ: Я решил сделать эту функцию на гораздо меньших сетках. У меня есть все сетки в папке, и я хочу пройтись по каждой из них. У меня есть некоторые проблемы, хотя. Вот мой код:
#set working directory
setwd("C:/Users/myData/")
#get a list of all the raster files in that folder
ingrids <- list.files(getwd(), pattern=".TIF$", full.names=FALSE, recursive=FALSE)
#loop through each raster file, dropping the file extension and giving a unique filename to each, and doing the "cell2nb" function on each.
for (i in 1:length(ingrids)){
fileName <-strsplit(ingrids[i],split="\\.")[[1]][1]
outputFile<-paste(fileName, '_nb','.tif',sep='')
mydatanb <- cell2nb(17,17, type="rook", torus=FALSE)
mydataout <-writeRaster(BETUPAPnb, filename=outputFile, overwrite=TRUE)
}
Я получаю следующее сообщение об ошибке:
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘writeRaster’ for signature ‘"nb", "character"’
Я был бы очень признателен за любую помощь, пытаясь выяснить эту проблему зацикливания!
2 ответа
Функция cell2nb
генерирует список соседей для сетки ячеек. Переходя mydata
неверно, и это то, что генерирует вашу ошибку. Вот параметры, которые он ожидает:
> cell2nb
function (nrow, ncol, type = "rook", torus = FALSE)
{...}
Вам нужно указать количество строк и количество столбцов. Ты можешь использовать summary.nb
на объекте, созданном cell2nb
чтобы увидеть детали объекта, он возвращается.
Я сделал неверное предположение о том, что будет вывод функции cell2nb. Это не растр, поэтому инструмент WriteRaster не будет работать. Функция создает объект "nb", который затем вызывается в других функциях как есть.
Другая ключевая часть информации заключается в том, что функция cell2nb не зависит от конкретного набора растровых данных, то есть от конкретного пространственного расположения. Вместо этого он создает объект nb на основе заданного пользователем экстента (экстента ваших растровых данных, которые вы вызываете позже для использования с объектом nb после его создания).