在For循环中使用quantmod函数getSymbols时下载失败

在For循环中使用quantmod函数getSymbols时下载失败,r,quantmod,R,Quantmod,我试图使用quantmod软件包获取印度NSE指数的1632只股票的数据。我可以单独下载股票;然而,当我循环所有股票时,我得到了一个超时。如何循环getSymbols函数来下载所需数据 报告了以下错误: 错误:“20MICRONS.NS”下载在两次尝试后失败。错误消息: HTTP错误404。 5. 停止(Symbols.name,“两次尝试后下载失败。错误”, “消息:\n”,attr(dl,“条件”)$message,call.=FALSE) 4. getSymbols.yahoo(Symbo

我试图使用
quantmod
软件包获取印度NSE指数的1632只股票的数据。我可以单独下载股票;然而,当我循环所有股票时,我得到了一个超时。如何循环
getSymbols
函数来下载所需数据

报告了以下错误:

错误:“20MICRONS.NS”下载在两次尝试后失败。错误消息: HTTP错误404。 5. 停止(Symbols.name,“两次尝试后下载失败。错误”, “消息:\n”,attr(dl,“条件”)$message,call.=FALSE) 4. getSymbols.yahoo(Symbols=“'20MICRONS.NS'”,env=, verbose=FALSE,warnings=TRUE,auto.assign=TRUE) 3. do.call(粘贴(“getSymbols.”,symbol.source,sep=”“),list(Symbols=current.Symbols, env=env,verbose=verbose,warnings=warnings,auto.assign=auto.assign, ...)) 2. getSymbols(如.character(x),src=“yahoo”) 1. f(符号[i])

MyData好的,现在我明白了

首先从以下位置下载符号: 这是页面上列出的第一个文件

NSE文件中的每个符号似乎都需要添加一个“.NS”后缀。这就是为什么您可以单独下载股票,但当您将文件的符号列传递到
getSymbols
时,它会失败

我还将创建一个新的环境,将每一只股票都投入其中,并使您的全球环境易于管理

最后,将
NSE_Symbols
传递给quantmods
getSymbols
函数以获取日常数据。 我喜欢使用
sapply
加上
try
,这样如果你碰到了一个坏符号, HTTP错误404
不会停止下载剩余符号

EQUITY_L <- read.csv("~/R/stack-overflow/data/EQUITY_L.csv", stringsAsFactors = FALSE)

NSE_Symbols <- paste0(EQUITY_L$SYMBOL,".NS")

NSE_stocks <- new.env() 

library(quantmod)
sapply(NSE_Symbols, function(x){try(getSymbols(x, env=NSE_stocks), silent=TRUE)})
成功下载的符号将整齐地包含在
NSE\u stocks
环境中

祝你好运


错误消息中
20MICRONS.NS
周围的三重引号看起来可疑。我刚才在我的机器上运行
quantmod::getSymbols(“20MICRONS.NS”)
没有问题。如果您认为在下载之间暂停会有所帮助,那么可以使用
Sys.sleep(2)
在循环的每次迭代中添加两秒钟的暂停。为了进一步挖掘,我需要查看“Equity_L.csv”文件中的内容。奖金:如果您只需要收盘价,您可以将这些证券作为单个xts对象带回全球环境:
NSE_xts@justinthankyou,但代码不起作用。我得到了与您相同的缺失符号,但是,这只是一个字符串,而不是实际的xts对象。我将粘贴函数编辑为NSE_符号,如果您得到相同的缺失符号,则意味着您下载了除17之外的所有股票,这是字符串报告的内容。其余股票处于
NSE_股票
环境中。请看我在上面关于如何将它们融入全球环境的评论。非常感谢。对变量NSE_xts保存所有收盘价的数据。我不熟悉编码和环境,do.call肯定会增加价值。是的,do.call和环境是一个很好的组合
do.call
特别有用,我会深入研究文档,以及
sapply
。此外,还可以在堆栈溢出中搜索使用这些函数的其他示例。祝你好运
EQUITY_L <- read.csv("~/R/stack-overflow/data/EQUITY_L.csv", stringsAsFactors = FALSE)

NSE_Symbols <- paste0(EQUITY_L$SYMBOL,".NS")

NSE_stocks <- new.env() 

library(quantmod)
sapply(NSE_Symbols, function(x){try(getSymbols(x, env=NSE_stocks), silent=TRUE)})
length(NSE_Symbols[!(NSE_Symbols %in% names(NSE_stocks))])
[1] 17

NSE_Symbols[!(NSE_Symbols %in% names(NSE_stocks))]
[1] "3PLAND.NS"     "BHAGYANGR.NS"  "CHEMFAB.NS"    "ELECTROSL.NS"  "GANGESSECU.NS" 
[6] "GMMPFAUDLR.NS" "GUJRAFFIA.NS"  "HBSL.NS"       "KALYANI.NS"    "MAGADSUGAR.NS" 
[11] "MANAKCOAT.NS"  "MCDOWELL-N.NS" "NIRAJISPAT.NS" "PALASHSECU.NS" "SIGIND.NS"
[16]"SPTL.NS"       "SUBCAPCITY.NS"