Я работаю над некоторыми данными о температуре в сетке, которые я классифицировал в матрице, где каждая ячейка может быть одним из двух классов - скажем, 0 или 1 для простоты.Для каждого класса я хочу рассчитать статистику патчей, основываясь на FRAGSTATS , который используется в ландшафтной экологии для характеристики формы и размера патчей среды обитания.
Для моих целей патч - это кластер смежных ячеек того же класса.Вот пример матрицы, mat
:
mat <-
matrix(c(0,1,0,
1,1,1,
1,0,1), nrow = 3, ncol = 3,
byrow = TRUE)
0 1 0
1 1 1
1 0 1
Все 1 в mat
образуют один патч (мы будем игнорировать 0), и для вычисления различных метрик формы мне нужноуметь рассчитать периметр (т.е. количество внешних ребер).
РЕДАКТИРОВАТЬ Извините, я не могу опубликовать изображение, потому что у меня недостаточно репутации, но вы можете увидеть в черных линиях ответа G5W ниже, что внешние границы 1 представляютвнешние края, на которые я ссылаюсь.
Вручную я могу посчитать, что участок 1 с имеет 14 внешних краев, и я знаю, что площадь (т.е. количество ячеек) равна 6. Основано на статье Он и др. и этот другой вопрос Я выяснил, как рассчитать количество внутренних ребер (в данном примере 5), но я действительно изо всех сил пытаюсь сделать то же самое для внешнегокрая!Я думаю, что это как-то связано с тем, как форма патча сравнивается с наибольшим целочисленным квадратом, который имеет меньшую площадь (в данном случае квадрат 2 x 2), но до сих пор мои исследования и размышления были безрезультатными.
NB Мне известен пакет SDMTools
, который может рассчитывать различные метрики FRAGSTATS.К сожалению, возвращаемые метрики слишком обработаны, например, вместо просто индекса агрегации, мне нужно знать фактические числа, используемые для его вычисления (количество наблюдаемых общих ребер / максимальное количество общих ребер).
Это мой первый постздесь, так что я надеюсь, что это достаточно подробно!Заранее спасибо:)