使用R下载CAISO数据文件遇报错,寻求解决方法
解决R下载CAISO数据文件的报错问题
问题分析
你尝试用两种方法下载CAISO的zip数据文件均失败:
utils::download.file设置timeout=120仍提示60秒超时,无法打开URL;curl::curl_download传入timeout_ms和chunk_size参数时提示“未使用的参数”。
错误原因
- download.file超时问题:Windows默认的
method="wininet"不支持自定义超时设置,导致timeout=120不生效,仍使用默认60秒超时。 - curl_download参数错误:
curl_download没有timeout_ms和chunk_size这两个直接参数,超时需通过handle对象配置,chunk_size无需额外设置(默认处理已适配大文件)。
修正后的代码
方法1:使用utils::download.file(更换method)
library(utils) # 修正时间参数为需求中的2017年 zip_url <- "http://oasis.caiso.com/oasisapi/SingleZip?queryname=PRC_INTVL_LMP&startdatetime=20170301T07:00-0000&enddatetime=20170323T07:00-0000&version=3&market_run_id=RTM&node=GONDER_LNODEN1&resultformat=6" zip_path <- "E:/Data - Test Download/my_data.zip" # 使用libcurl作为下载方法,确保timeout参数生效 download.file(zip_url, destfile = zip_path, mode = "wb", timeout = 120, method = "libcurl")
方法2:使用curl::curl_download(正确配置handle)
library(curl) zip_url <- "http://oasis.caiso.com/oasisapi/SingleZip?queryname=PRC_INTVL_LMP&startdatetime=20170301T07:00-0000&enddatetime=20170323T07:00-0000&version=3&market_run_id=RTM&node=GONDER_LNODEN1&resultformat=6" zip_path <- "E:/Data - Test Download/my_data.zip" # 创建handle对象设置超时(单位:秒),添加User-Agent避免服务器拦截默认R请求 h <- new_handle( timeout = 120, useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" ) curl_download(zip_url, zip_path, handle = h)
额外注意事项
- 确保目标路径
E:/Data - Test Download/已存在,否则会出现“无法打开文件”的错误; - CAISO API存在请求频率限制,若仍失败可尝试缩短时间范围分批下载;
- 代码已修正你原代码中的时间参数(从2021年改为需求中的2017年),可根据实际需求调整。
内容的提问来源于stack exchange,提问作者user2946746
相关产品推荐
相关产品推荐

