Изменение переменной в строке в цикле 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