2016-05-10 7 views
0

Я недавно наткнулся на setValues() форму raster, но мне интересно, какой вариант использования этой функции. Существует ли какое-либо преимущество по сравнению с обычным подмножеством и индексированием:Использовать случай setValues ​​растровый

r  <- raster(ncol=10, nrow=10) 

#setValues Function 
r  <- setValues(r, values=1, index=10) 

#Normal indexing 
r[10] <- 1 

Оба выхода дают тот же результат. Однако в документации говорится, что:

В то время как вы можете получить доступ к слот «значения» объектов напрямую, вы бы сделать это на свой страх и риск, потому что при установке значения, несколько слотов должны быть изменены; что и делают эти функции.

Что означает автор в опасности? И какие слоты остаются неизменными, когда я использую обычное подмножество, а не функцию setValues ​​или есть ли какие-либо преимущества с точки зрения производительности?

+0

Когда автор предупреждает против прямого изменения В слове «значения» они говорят о том, чтобы не делать что-то вроде этого: «r <- растр (матрица (1: 9, nc = 3)); r @ data @ values ​​<- 100 * (1: 9) '. Если вы обезьяны вокруг этого, непосредственно изменяя структуру данных низкого уровня, вы обходите много приятных вещей, которые сделаны для вас, если вы не будете непосредственно знать об этом. Попробуйте (например) запустить 'minValue (r)' до и после этого прямого назначения в слот данных 'values', чтобы понять, что я имею в виду. И затем сделайте 'getMethod (" setValues ​​"," RasterLayer ")' для более подробного просмотра того, что 'setValues' делает для вас. –

+0

Осторожно: вторая и третья строки кода в вашем блоке кода фактически не делают то же самое. –

ответ

1

Основной прецедент для setValues - это если требуется присвоить вектор значений ячеек (возможно, пустым) RasterLayer. Например.

library(raster) 
r <- raster(ncol=10, nrow=10) 
r <- setValues(r, 1:100) 

Более R-идиоматических вариация

values(r) <- 1:100 

индексирование обычно используется для нескольких ячеек

r[1:5] <- NA 

Но вы также можете использовать его, чтобы установить значения для всех ячеек

r[] <- 1:100 
Смежные вопросы