Ваш цикл неверен.Вы делаете for( i in report_files){
, но позже вы используете i
, как если бы у вас было for( i in 1:length(report_files)){
Внутри цикла вы делаете table(reportfiles_single)
, тогда как в вашем примере с рабочим кодом эквивалент будет table(values(reportfiles_single))
.
Кроме того, вы не сохраняете ни одного из результатов, поскольку вы перезаписываете report_mean
в каждой итерации.
Итак, вы должны начать с изучения работы циклов и сначала привести несколько простых примеров.
Кроме того, вы уверены, что пространственное разрешение ваших данных составляет около 7 на 7 см?Это возможно, но кажется маловероятным.
Вот пример того, что вы можете сделать.Я использую метод freq
, потому что он безопасен для памяти, в отличие от table(values())
library(raster)
f <- system.file("external/test.grd", package="raster")
report_files <- c(f, f, f)
res <- list()
for( i in 1:length(report_files)){
r <- raster(report_files[i])
# note the -2 for this example, you probably do not want that with your data
f <- freq(r, digits= -2)
cellsize <- prod(res(r))
f[,2] <- f[,2] * cellsize
res[[i]] <- f
}
Вместо использования цикла, вы можете сделать:
s <- stack(report_files)
x <- freq(s, digits=-2)
И умножить наразмер клетки позже.