Страница 1 из 1
Ошибка при кластеризациии растра
Добавлено: 15 янв 2022, 14:08
_taras_
Доброго времени!
Тренируюсь делать кластеризацию растра.
Код: Выделить всё
library(raster)
library(rgdal)
r_ndvi <- brick("/home/username/NDVI_VBU_08.tif")
Проверяю корректность загрузки
Делаю кластеризацию и убираю пустые значения
Код: Выделить всё
ICE.df <- as.data.frame(ICE)
cluster.ICE <- kmeans(na.omit(ICE.df), 4)
Создаю пустой растр аналогичный ICE
Пытаюсь надожить результат кластеризации на растр
Код: Выделить всё
clusters <- setValues(clusters, cluster.ICE$cluster)
И получаю ошибку
Код: Выделить всё
Ошибка в setValues(clusters, cluster.ICE$cluster) : length(values) is not equal to ncell(x), or to 1
Как побороть данную ошибку построить и сохранить результат кластеризации?
Re: Ошибка при кластеризациии растра
Добавлено: 15 янв 2022, 14:45
_taras_
Возможно эта ошибка связана с тем, что ранее растр был обрезан, а R "понимает" только прямоугольный раст?
Re: Ошибка при кластеризациии растра
Добавлено: 15 янв 2022, 15:32
gamm
_taras_ писал(а): ↑15 янв 2022, 14:45
ошибка связана с тем, что ранее растр был обрезан
нет, растр у вас не обрезан - просто вы выкинулим часть данных из таблицы, и не учли этого
Код: Выделить всё
ICE <- stack(r_ndvi)
plot(ICE)
ICE.df <- as.data.frame(ICE)
ind <- !apply(is.na(ICE.df),1,any)
cluster.ICE <- kmeans(ICE.df[ind,], 4)
clusters <- raster(ICE)
clusters[] <- NA
clusters[ind] <- cluster.ICE$cluster
Re: Ошибка при кластеризациии растра
Добавлено: 15 янв 2022, 16:31
_taras_
Спасибо за ответ gamm!
Насколько я понял командой находим NA и заменяем 1
затем считаем кастеры
Однако при попытке создать новый растр
Код: Выделить всё
clusters <- raster(ICE)
clusters <- setValues(clusters, cluster.ICE$cluster)
появляется та же ошибка
Код: Выделить всё
Ошибка в setValues(x, value) :
length(values) is not equal to ncell(x), or to 1
Re: Ошибка при кластеризациии растра
Добавлено: 15 янв 2022, 17:40
gamm
_taras_ писал(а): ↑15 янв 2022, 16:31
Насколько я понял командой находим NA и заменяем 1
нет
посмотрите help, строим индекс строк, в которых есть хоть одно значение NA
И я же вам рабочий код написал, зачем вы опять те же ошибки сажаете?
Re: Ошибка при кластеризациии растра
Добавлено: 15 янв 2022, 18:00
_taras_
gamm писал(а): ↑15 янв 2022, 17:40
И я же вам рабочий код написал, зачем вы опять те же ошибки сажаете?
Растр создать не получается.
Re: Ошибка при кластеризациии растра
Добавлено: 15 янв 2022, 18:53
gamm
_taras_ писал(а): ↑15 янв 2022, 18:00
Растр создать не получается.
в смысле? в каком месте? просто скопируйте или загрузите, все само создастся.
cluster <- raster("/home/username/NDVI_VBU_08.tif",band=1)
я у себя запустил на первом попавшемся файле, все работает. У вас там сколько каналов в исходном растре?
Re: Ошибка при кластеризациии растра
Добавлено: 15 янв 2022, 21:07
_taras_
gamm, Ваш код работает.
Результат получил так
plot(clusters, col = viridis_pal(option = "D")(4), main = "NDVI")
Едиственно, ненравится, что шкала имеет не целые значения.
gamm писал(а): ↑15 янв 2022, 18:53
У вас там сколько каналов в исходном растре?
Пока один, но многоканальными растрами еще буду разбираться....
Re: Ошибка при кластеризациии растра
Добавлено: 15 янв 2022, 23:01
gamm
_taras_ писал(а): ↑15 янв 2022, 21:07
Пока один
а зачем тогда весь этот огород городить с кирпичами и стопками? я бы посоветовал грузить слои многоканального растра по одному, превращать их в вектора (используя []), и собирать data.frame. А потом грузить результат обратно, используя тот же оператор [] и соответствующие индексы. По крайней мере быдете всегда контролировать, что происходит.
Re: Ошибка при кластеризациии растра
Добавлено: 16 янв 2022, 00:35
_taras_
gamm писал(а): ↑15 янв 2022, 23:01
а зачем тогда весь этот огород городить
Тренируюсь
Всплыла (в очередной раз) тема пожаров на водно-болотных угодьях. Вот и пытаюсь посмотреть, что можно вытянуть из космоснимков.