Промяна на променлива в низ в for цикъл

Имам скрипт за отваряне на метеорологични данни от .h5 файл и изчисляване на средната скорост на вятъра (ugrd).

library(rhdf5)
windv.2014.dec <- h5read("/Users/sethparker/Documents/My_Lab/CR_met/Horizontes_2014DEC.h5", "ugrd")
a <- as.vector(windv.2014.dec)
a[which(a == 0)] = NA_character_
avg_windv.2014.dec <- mean(abs(as.numeric(na.omit(a))))

Това работи добре, но имам 57 от тези файлове. Опитвам се да намеря начин да използвам for цикъл, за да не се налага ръчно да променям датата всеки път, когато го стартирам. Загрижен съм главно за промяната на годината, нямам нищо против да направя процеса 12 пъти. Моят неуспешен опит за for цикъл е следният:

for (i in 4:9)
{
  windv.201i.oct <- h5read("/Users/sethparker/Documents/My_Lab/CR_met/Horizontes_201",i,"OCT.h5", "ugrd")
  a <- as.vector(windv.201i.oct)
  a[which(a == 0)] = NA_character_
  avg_windv.201i.oct <- mean(abs(as.numeric(na.omit(a))))
}

Данните са между 2014 и 2019 г., оттук и 4:9. Как да накарам променливата да работи в низа на пътя на файла?


person sethparker    schedule 06.02.2020    source източник


Отговори (1)


Можем да използваме paste или sprintf, за да създадем пътя и в цикъла на OP изходът се актуализира при всяка итерация. Можем да създадем празен списък, за да съхраняваме изхода и да му присвоим изхода

out <- vector('list', 6)
names(out) <- 4:9
for (i in 4:9){
   tmp <- h5read(sprintf("/Users/sethparker/Documents/My_Lab/CR_met/Horizontes_201%dOCT.h5", i), "ugrd")
     a <- as.vector(tmp)
     a[which(a == 0)] = NA_character_
     out[[as.character(i)]] <- mean(abs(as.numeric(na.omit(a))))
    }

names(out) <- sprintf("windv.201%s.oct", names(out))
person akrun    schedule 06.02.2020