for循环中的字符串更改变量

问题描述 投票:0回答:1

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

r string for-loop hdf5
1个回答
0
投票

我们可以使用pastesprintf创建路径,并且在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))
© www.soinside.com 2019 - 2024. All rights reserved.