【问题标题】:Changing variable in a string in a for loop在for循环中更改字符串中的变量
【发布时间】:2020-05-22 21:28:09
【问题描述】:

我有一个用于从 .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】:

    我们可以使用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))
    

    【讨论】:

      猜你喜欢
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      相关资源
      最近更新 更多