我有一个脚本,用于打开.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。如何使变量在文件路径字符串中起作用?
我们可以使用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))