2014-03-03 94 views
2

我在将股票定价数据导入到R时遇到了一些问题。我有超过4k个符号的列表,有些不再有效/有效。我在列表中使用了一个名为get.hist.quote的lapply,但是一些糟糕的收单机构太多地阻止了它,因为它不是一个实用的方法。以下这篇文章:l_ply: how to pass the list's name attribute into the function?并试图使用接受的答案是我能找到的看似最好的方法,但它不起作用。 l_ply不会将任何符号加载到我的工作区中。我得到这些警告:getSymbols没有按预期返回数据

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=".")]) 
} 
+1

那些更常见的成语是警告,而不是错误。但是,你说“不按预期返回数据”。什么是预期的,它与你得到的有什么不同? – GSee

+0

措辞不佳;是的,警告。我期待在工作空间中使用数据的符号;但是,我没有。 – StatsViaCsh

+1

哦,我明白了。如果你使用'getSymbols(sym,env = globalenv())'它会做你所期望的。我将添加一个更常见的成语 – GSee

回答

3

的问题是,默认情况下getSymbols分配在parent.frame()数据。当您从功能呼叫getSymbols()时,parent.frame()不再是您习惯的.GlobalEnv。所以,快速解决您的电流可能会与

l_ply(symbols, function(sym) try(getSymbols(sym, env=globalenv()))) 

请注意,您可以在您使用get下一步碰到麻烦更换

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

。您应该也可以指定您想要的数据来自哪个环境,以便在将其放入函数中时也可以工作。即sym.list <- llply(symbols, get, pos=globalenv())


以下是获取与quantmod

合并数据
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]) 

或者,使用try像OP

L <- lapply(symbols, function(sym) try(getSymbols(sym, auto.assign=FALSE))) 
do.call(merge, lapply(L, Cl)) 
+0

非常感谢!我很感激。 – StatsViaCsh