2012-04-14 55 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