Классифицированные растровые изображения извлекают информационную петлю в R - PullRequest
0 голосов
/ 25 мая 2018

У меня 800 классифицированных растровых изображений (7 классов), и каждый класс из одного изображения должен быть рассчитан в квадратных метрах.Пока что это работает с одним изображением, но не с циклом.Что я могу сделать, чтобы решить это?

report_files<-list(list of 800 tif files)
    for( i in report_files){
  reportfiles_single<-raster(report_files[i])
  df<-as.data.frame(table(reportfiles_single))
  df2<-as.data.frame(df$Freq*(0.070218*0.070218))
  {report_mean<- df2}
}

Эта часть работает для одного и есть пример файла: https://ufile.io/rb7tj

a<-raster("test060707.tif")
val<-values(a)
table_val<-data.frame(val)
df<-as.data.frame(table(table_val))
df2<-as.data.frame(df$Freq*(0.070218*0.070218))

1 Ответ

0 голосов
/ 26 мая 2018

Ваш цикл неверен.Вы делаете 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)

И умножить наразмер клетки позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...