Изменение переменной в строке в цикле for - PullRequest
1 голос
/ 06 февраля 2020

У меня есть скрипт для открытия метеорологических данных из файла .h5 и расчета средней скорости ветра (угр.).

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 таких файлов. Я пытаюсь найти способ использовать для l oop, чтобы не приходилось вручную изменять дату при каждом запуске. В основном меня интересует смена года, я не против сделать этот процесс 12 раз. Моя неудачная попытка a для l oop такова:

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. Как заставить переменную работать в строке пути к файлу?

1 Ответ

0 голосов
/ 06 февраля 2020

Мы можем использовать paste или sprintf для создания пути, а в операторе l oop выходные данные обновляются на каждой итерации. Мы можем создать пустой список для хранения вывода и присвоить ему вывод

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))
...