Хранить растровые имена и средства для большого числа растров - PullRequest
0 голосов
/ 22 февраля 2019

Для очень большого числа растров мне нужно перебрать растры и иметь имя растра и среднее значение ячейки растра.

Этот код работает правильно, но сохраняет только результат последнего элемента в цикле, и, конечно, мне нужно сохранить его для каждого i (= для каждого растра).

 for(i in ras){
      dfff$A <- cellStats(i,"mean")
      dfff$B <- i 
    }

Мне нужен код, который хранит результат для каждого растра, как имя, так и среднее значение (так что можно легко увидеть, какое среднее значение соответствует какому растру).Это кодирует ошибки смертельно.

   for(i in ras){
      dfff[i]$A <- cellStats(i,"mean")
      dfff[i]$B <- i 
    }

Кто-нибудь есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 22 февраля 2019

Если растры имеют одинаковое происхождение и экстент, вы можете просто сделать

library(raster)
s <- stack(ras)
cellStats(s)

В противном случае вы можете делать cellStats в цикле

d <- rep(NA, length(ras))
nms <- rep(NA, length(ras))
for(i in 1:length(ras)){
     d[i] <- cellStats(ras[[i]], "mean")
     nms[i] <- names(ras[[i]])
}

Я не уверен, что выимеется в виду с "именем" растра.В своем коде вы присваиваете весь объект "B".Но в любом случае вам не нужно делать это в цикле, так как у вас уже есть список растров (я предполагаю, что это ras.) Так что вы также можете сделать

nms <- sapply(ras, names)

илиВы имеете в виду имя файла?

nms <- sapply(ras, filename)

Теперь вы можете сделать

df <- data.frame(name=nms, mean=d)

Проблема вашего второго цикла в том, что i не является числовым индексом, это растровый объект.Так что вы не можете сделать diff[i]

...