проблема с петлями в R - PullRequest
0 голосов
/ 05 мая 2011
library(rgdal) 
my_asc = dir("~/Pulpit/dods/karol/TVDI113_121",
             pattern=".asc", recursive=TRUE, full.names=TRUE)
for (i in 1:length(my_asc)) {
    r <- readGDAL(my_asc[i])
    z <- as.matrix(r)
    vectordata[i] <- mean(z) 
    vectordatamax[i] <- max(z) 
    vectordatamin[i] <- min(z) 
    vectordev[i] <- sd(z, na.rm=TRUE) 
    hist(z)
    png(filename="hist"+tostring(i)+".png")
}

Я пытаюсь внести некоторые изменения в этот цикл, но он все еще не работает (я работаю в Rstudio) - какой фрагмент неверен?

Я также хотел бы использовать более сложный шаблон (чтобы перечислить только файлы, которые в конце содержат два имени), но добавив что-то вроде: pattern="_??.asc" кажется, не работает.

Я хотел бы добавить еще один цикл для получения списка папок (вместо ручной вставки каталогов в переменную my_asc), но у меня нет идеи, как я могу это сделать? Я не знаю, почему мой способ создания векторов для значений среднего, максимального, минимального и стандартного отклонения не работает ...

1 Ответ

2 голосов
/ 05 мая 2011

С чего начать. , .

Возможно, вы хотите, чтобы na.rm = TRUE для каждого из средних, максимальных и минимальных значений, и вам нужно будет правильно ввести TRUE для sd.

Hist (z) должен идти после png (имя файла, ...), и после него должна следовать dev.off () (как минимум).

Вы не можете склеивать строки с "+" в R, используйте paste ().

vectordata <- vectordatamax <- vectordatamin <- vectordev <- numeric(length(my_asc))
for (i in seq_along(my_asc)) {
  r <- readGDAL(my_asc[i])
  ## as.matrix is not necessary, as the band values are accessible directly
  ##z <- as.matrix(r)
  z <- r[[1]]
  vectordata[i] <- mean(z, na.rm=TRUE) 
  vectordatamax[i] <- max(z) 
  vectordatamin[i] <- min(z) 
  vectordev[i] <- sd(z, na.rm=TRUE) 
  png(filename=paste("hist", i, ".png", sep=""))
  hist(z)
  dev.off()
}
...