【问题标题】:"only first element of 'destfile' argument used", downloading files in a loop“仅使用 'destfile' 参数的第一个元素”,循环下载文件
【发布时间】:2019-01-14 05:30:14
【问题描述】:

我正在尝试使用 R 下载一堆包含日常数据的 NetCDF 文件。因为我需要多年的数据,所以我编写了一个循环来下载这些文件,但我收到的消息只有 ' 的第一个元素使用 destfile' 参数并且只下载第一个文件。

file_base <- paste0("https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/access/avhrr-only/199801/")

yrs=c("1998")
mon=c("01")
day=("01","02","03")

for (y in yrs){
    for (m in mon){
        for (d in day){
            ymd <- paste0(yrs,mon,day)
            fn_url <- paste0 (file_base,"avhrr-only-v2.",ymd,".nc")
            fn <- paste0("avhrr-only-v2",ymd,".nc")
    download.file(url=paste0(file_base), destfile=fn, method="auto", quiet=TRUE, mode="wb")
        }
    }
}

我查看了Download multiple files using "download.files" function 和该线程中的其他两个超链接,但我仍然无法弄清楚为什么我会收到警告消息以及如何让 R 下载多个文件。我对 R 还是有点陌生​​,所以任何帮助/提示都会很棒。谢谢!

【问题讨论】:

  • ymd &lt;- paste0(yrs,mon,day) 应该是 ymd &lt;- paste0(y, m, d)。但是,在迭代之前创建文件名不会那么混乱,如果您以后想要制作数据框列表,这使得它更容易转换为 lapplyMap

标签: r loops download


【解决方案1】:
file_base <- "https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/access/avhrr-only/199801/avhrr-only-v2."
dates <- paste0("199801", sapply(as.character(1:31), function(x) if(nchar(x) == 1) paste0(0, x) else x, simplify = T))

for(date in dates){
  download.file(url = paste0(file_base, date, ".nc"),
                destfile = paste0("avhrr-only-v2", date, ".nc"),
                method = "auto", 
                quiet = T,
                mode = "wb")
}

【讨论】:

  • function(x) 有什么作用? nchar(x) == 1 是否意味着如果日期只有一位数字则在前面添加一个 0?
  • 是的,完全正确。有关 function(x) 部分的信息,请参见 ?sapply (简而言之,它告诉 R 如何教授向量 1:31 的元素。
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 2016-02-22
  • 2019-10-30
  • 1970-01-01
  • 2020-07-19
  • 2016-05-17
  • 2014-03-02
  • 1970-01-01
相关资源
最近更新 更多