R getSymbols未按预期返回数据

R getSymbols未按预期返回数据,r,quantmod,R,Quantmod,我在将股票定价数据输入R时遇到了一些问题。我有一个超过4k的符号列表,其中一些符号不再有效。我在列表中使用了一个带有get.hist.quote的lappy,但是一些糟糕的代码错误地阻止了它,使它无法成为一种实用的方法。下面这篇文章:尝试使用公认的答案似乎是我能找到的最好的方法,但它不起作用。该层不会将任何符号加载到我的工作区中。我收到以下警告: Warning messages: 1: In download.file(paste(yahoo.URL, "s=", Symbols.name,

我在将股票定价数据输入R时遇到了一些问题。我有一个超过4k的符号列表,其中一些符号不再有效。我在列表中使用了一个带有get.hist.quote的lappy,但是一些糟糕的代码错误地阻止了它,使它无法成为一种实用的方法。下面这篇文章:尝试使用公认的答案似乎是我能找到的最好的方法,但它不起作用。该层不会将任何符号加载到我的工作区中。我收到以下警告:

Warning messages:
1: In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m,  :
  downloaded length 90279 != reported length 200
2: In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m,  :
  downloaded length 87827 != reported length 200
3: In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m,  :
  downloaded length 89737 != reported length 200
下面是我试图使用的上面引用的帖子中的代码。这有解决办法吗?我看到了其他关于类似情况的帖子,但是像这样的修复对我来说不起作用。如果其他人有一个好方法让我获得许多股票行情的每日数据,我愿意接受所有建议。提前谢谢

library(quantmod)
library(plyr)
symbols <- c("MSFT","C","MMM")

#1
l_ply(symbols, function(sym) try(getSymbols(sym))) 
symbols <- symbols[symbols %in% ls()]

#2
sym.list <- llply(symbols, get) 

#3
data <- xts()
for(i in seq_along(symbols)) {
  symbol <- symbols[i]
  data <- merge(data, get(symbol)[,paste(symbol, "Close", sep=".")])
}
库(quantmod)
图书馆(plyr)

symbols问题在于默认情况下
getSymbols
分配
parent.frame()中的数据。从函数调用
getSymbols()
时,
parent.frame()
不再是您习惯使用的
.GlobalEnv
。因此,一个快速修复当前问题的方法可能是更换

l_ply(symbols, function(sym) try(getSymbols(sym)))


请注意,在下一步使用
get
时,您可能会遇到麻烦。您可能还应该指定要从哪个环境
获取数据,这样,如果将数据放入函数中,它也可以工作。i、 e.
sym.列出那些是警告,而不是错误。但是,你说“未按预期返回数据”。预期结果是什么,与你得到的结果有何不同?措词不当;是的,警告。我希望在我的工作区中有带有数据的符号;但是,我没有。哦,我明白了。如果您使用了
getSymbols(sym,env=globalenv())
它会达到您的预期效果。我将在两篇相关的帖子中添加一个更常见的习语:谢谢!我很感激。
l_ply(symbols, function(sym) try(getSymbols(sym, env=globalenv())))
library(quantmod)
s <- c("MSFT","C","MMM")
e <- new.env() #environment in which to store data
getSymbols(s, src="yahoo", env=e)
do.call(merge, eapply(e, Cl)[s])
L <- lapply(symbols, function(sym) try(getSymbols(sym, auto.assign=FALSE)))
do.call(merge, lapply(L, Cl))