Не удается обновить значения ячеек в R Raster

У меня есть список ячеек в растре, для которых я хотел бы изменить значение ячеек (оставив все остальные ячейки в покое). Я скопировал тестовый (воспроизводимый) код ниже, который мне удалось заставить работать. Он генерирует тестовый растр и для ячеек, определенных в vals, изменяет значение ячеек на 50.

# My List of Cells That Require Changing
vals<-c(2,4,6,10,15,27)

#Example Raster
r <- raster(ncol=6, nrow=6)
r[] <- 1:ncell(r)
plot(r)


#Change Cell Values
r[r%in%c(vals)] <- 50
plot(r)

Все идет нормально. Однако, когда я применяю тот же код к своим реальным данным, я не могу изменить значения ячеек. Код работает абсолютно нормально (никаких сообщений об ошибках), но значения ячеек просто не меняются.

Мой первый вопрос: сталкивался ли кто-нибудь с этой проблемой раньше? Мой второй вопрос: как мне лучше всего предоставить свой реальный пример сообществу StackOverflow, чтобы, возможно, кто-то мог помочь мне устранить проблему? Боюсь, что без использования моего набора данных проблема останется нерешенной. Я читал, что использование r [r% in% c (vals)] ‹- 50 может быть нестабильным с точки зрения памяти для больших растров, но я не уверен, что это так в моем примере (мой растр - это изображение Ямайки и содержит всего 4185 ячеек, и при запуске кода я не заметил никаких всплесков использования ОЗУ).

Мы будем очень благодарны за любую помощь, которую вы можете оказать.


person Simon    schedule 11.02.2016    source источник


Ответы (1)


Можете ли вы попробовать этот альтернативный подход:

rcl <- cbind(from = vals, to=50)
x <- reclassify(r, rcl)

Если это тоже не сработает, можно предположить, что значения, которые вы хотите заменить, на самом деле отсутствуют в ваших данных.

person Robert Hijmans    schedule 12.02.2016
comment
Привет, Роберт, спасибо за ответ. Я пробовал описанное выше, и это не работает - код работает без ошибок, но мой график не отображает изменений. Я создал свой список ячеек (vals) из растра, который пытаюсь обновить. Поэтому я не могу понять, почему ячейки, для которых я пытаюсь обновить значения, отсутствуют в моем растре. - person Simon; 12.02.2016
comment
Здесь может оказаться полезной некоторая дополнительная информация. Я использовал cellFromXY, чтобы пометить все ячейки, содержащие запись о вхождении вида. Именно эти клетки я пытаюсь изменить. Конечная цель состоит в том, чтобы затем использовать функцию «расстояние» для вычисления поверхности расстояния. - person Simon; 12.02.2016
comment
cellFromXY дает вам номера ячеек, а не значения ячеек. Если у вас есть номера ячеек, вы можете r[cellnumbers] <- 50 - person Robert Hijmans; 12.02.2016