Я хочу изменить поднабор слоев в растровом кирпиче, умножив эти слои на другой растровый.subassignment выбранных слоев в растровом кирпиче
Например, если мы имеем растровый кирпич под названием «r.brick» и попытаться умножить его слои 2: 4 растра, «r.mult», с тем же строками & размерами столбцов:
r.brick[[2:4]]
возвращает слои 2: 4, как и ожидалосьr.brick[[2:4]] * r.mult
успешно умножает эти слои, как и ожидалось
, но, если я пытаюсь присвоить результат обратно в подмножество слоев я получаю сообщение об ошибке
r.brick[[2:4]] = r.brick[[2:4]] * r.mult
# Error in value[] <- val :
# incompatible types (from S4 to double) in subassignment type fix
Сообщение об ошибке свидетельствует о том, что назначение пытается присвоить растр дорожит, а не самого растра. Но если я пытаюсь задание с getValues
, я получаю другую ошибку:
r.brick[[2:4]] = getValues(r.brick[[2:4]] * r.mult)
# Error in .local(x, values, ...) : length(values) is not equal to ncell(x)
Что такое правильный способ сделать это?
Некоторые воспроизводимые данные:
library(raster)
r.list = vector("list", 20)
set.seed(123)
for (i in 1:20) {
r.list[[i]] = raster(vals=runif(100), nrows=10, ncols=10, ext=extent(c(0,25,0,25)))
}
r.brick = brick(r.list)
r.mult = raster(vals=sample(2,100,T), nrows=10, ncols=10, ext=extent(c(0,25,0,25)))
Вы пытались использовать setValues? (Не знаю, разрешает ли это присвоение на нескольких слоях, хотя ...) – lbusett
@LorenzoBusetto setValues только, кажется, работает на отдельных слоях, насколько я могу судить. – dww