2012-04-14 57 views
2

我想要做的事情相当简单,但我一直无法弄清楚。我以为我可以做类似的概述hereadjustOHLC - 需要解决方案来循环传递字符的字符向量

我有一个字符向量的tickers是由getSymbols返回的xts OHLC对象。我想遍历符号每个股票和符号传递给adjustOHLC调整为分裂:

symbols = c("FCX", "SPY") 

for(symbol in symbols){ 
    return(adjustOHLC(symbol,adjust =c("split"), use.Adjusted=FALSE)) 
} 

看来adjustOHLC变量“符号”的价值:

debug: div <- getDividends(symbol.name) 
Browse[2]> symbol.name 
[1] "symbol" 
Browse[2]> 
Error in download.file(paste(yahoo.URL, Symbol.name, "&a=", from.m, "&b=", : 
    cannot open URL 'http://ichart.finance.yahoo.com/table.csv?s=symbol&a=0&b=01&c=1970&d=3&e=14&f=2012&g=v&ignore=.csv' 
In addition: Warning message: 
In download.file(paste(yahoo.URL, Symbol.name, "&a=", from.m, "&b=", : 
    cannot open: HTTP status was '404 Not Found' 

如果我使用get(symbols),我会得到相同的结果(类似的方法用于本文顶部的链接中):

for(symbol in symbols){ 
    return(adjustOHLC(get(symbol),adjust =c("split"), use.Adjusted=FALSE)) 
} 

debug: div <- getDividends(symbol.name) 
Browse[2]> symbol.name 
[1] "get(symbol)" 
Browse[2]> 
Error in download.file(paste(yahoo.URL, Symbol.name, "&a=", from.m, "&b=", : 
    cannot open URL 'http://ichart.finance.yahoo.com/table.csv?s=get(symbol)&a=0&b=01&c=1970&d=3&e=14&f=2012&g=v&ignore=.csv' 
In addition: Warning message: 
In download.file(paste(yahoo.URL, Symbol.name, "&a=", from.m, "&b=", : 
    cannot open: HTTP status was '404 Not Found' 

我以为我也可以利用lapply来提高速度,但是我认为我先遇到了上述问题。

lapply(symbols, function(x) adjustOHLC(x, adjust=c("split"), use.Adjusted=FALSE))

似乎很容易 - 我道歉,如果这是那么微不足道。感谢帮助。

回答

3

x参数adjustOHLC应该是一个xts对象。所以,你需要使用get才能得到它。但是,如果雅虎股票代码符号不同于xts对象的名称(在这种情况下为get(symbol)),那么您需要使用symbol.name参数。此外,你需要分配你的for循环内的值,因为adjustOHLC不会像“getSymbols”那样“自动分配”。

symbols = c("FCX", "SPY") 
getSymbols(symbols, src='yahoo') 
for(symbol in symbols){ 
    assign(symbol,adjustOHLC(get(symbol, pos=.GlobalEnv), symbol.name=symbol, 
          adjust=c("split"), use.Adjusted=FALSE)) 
} 

既然你提到使用lapply,这里是你如何使用它

adjusted.list <- lapply(symbols, function(x) { 
    adjustOHLC(get(x, pos=.GlobalEnv), symbol.name=x, adjust=c("split"), 
      use.Adjusted=FALSE) 
}) 
names(adjusted.list) <- symbols