使用getSymbols.av获取数据时,整脚本运行报错的问题咨询
解决
getSymbols.av在Source模式下返回空临时文件的问题 我之前帮朋友排查过类似的问题,结合你的描述——单独跑代码段正常,但Source整个脚本就报临时文件为空的错,大概率是API调用频率限制或者环境加载问题导致的,给你几个针对性的解决方案:
1. 给API调用添加延迟(最可能解决问题)
Alpha Vantage的免费版API有调用频率限制:5次/分钟、500次/天。你单独运行代码时,两次getSymbols.av调用之间有手动间隔,不会触发限流;但Source模式下代码会连续执行,两次请求太近,服务器会返回空内容,导致后续read.zoo读取临时文件时报错。
给每次调用后加个延迟就行:
# 获取GOOGL数据后等待15秒,避开限流 GOOGL <- getSymbols.av("GOOGL",auto.assign=F,return.class = "xts",adjusted=T,outputs.size="full",data.type="csv",periodicity = "weekly") Sys.sleep(15) GOOG <- getSymbols.av("GOOG",auto.assign=F,return.class = "xts",adjusted=T,outputs.size="full",data.type="csv",periodicity = "weekly") Sys.sleep(15) google <- rbind.xts(GOOGL["2013-05-17/2014-04-04"],GOOG["2013-05-17/2018-05-18"]) google <- google[-48,]
2. 显式设置Alpha Vantage API密钥
有时候单独运行时,你的R环境已经加载了API密钥,但Source脚本时可能没读取到(比如密钥存在.Rprofile里,脚本启动时没加载),导致请求失败返回空。可以在脚本开头直接设置密钥:
# 替换成你自己的Alpha Vantage API密钥 av_api_key("YOUR_API_KEY_HERE") # 之后再执行getSymbols.av调用 GOOGL <- getSymbols.av(...)
3. 检查临时目录权限
Windows系统下,默认临时目录可能存在权限问题,导致getSymbols.av无法写入/读取临时文件。你可以指定一个自己有权限的目录作为临时目录:
# 创建并设置自定义临时目录(替换成你自己的路径) temp_dir <- "C:/MyR_Temp" dir.create(temp_dir, showWarnings = FALSE) Sys.setenv(TMP = temp_dir, TEMP = temp_dir) # 再执行后续代码 GOOGL <- getSymbols.av(...)
4. 尝试更新相关包或R版本
你的R版本是3.4.3(2017年的版本),比较老旧,可能quantmod或alphavantager包存在兼容性bug。如果条件允许:
- 先尝试更新相关包:
update.packages(c("quantmod", "alphavantager"), ask = FALSE)
- 要是更新包后还是有问题,建议升级R到4.x的稳定版本(比如4.3.1),新版本对包的兼容性更好,也能避免很多老版本的bug。
最后提醒你:提交给教授前,记得不要把API密钥硬编码在脚本里,可以用Sys.getenv("ALPHAVANTAGE_API_KEY")来读取环境变量里的密钥,更安全规范。
内容的提问来源于stack exchange,提问作者PrinzvonK
相关产品推荐
相关产品推荐

