我有一串行情,我試圖獲取使用Quantmod的數據。我的列表很長,並且有一些不好的提示,所以我使用了納入try函數。Quantmod,getSymbols,提取關閉價格R
我在使用Quantmod的Cl函數時遇到了問題。至於我可以告訴它應該工作 - 但我相信我的語法有一個小問題。
代碼:
tickers = c("IBM","GM") #This is an example for purpose here
stock_data <- lapply(tickers, function(tickers), try(getsymbols(tickers,
auto.assign=FALSE)))
close_prices <- do.call(merge,Cl(stock_data))
stock_data回來,通過與每個元素作爲一個日期值的行和列的一系列股票相關的數據(開,關,股票代碼確定XTS對象的列表等)。
close_prices應該只是所有代號的收盤價欄(即IBM收盤價欄,GM收盤價欄等)的清單或數據框。
當我應用do.call(我有各種排列 - 他們都不正確)我得到一個錯誤,告訴我他們是沒有列值xts對象中包含「關閉」 - 只是isn'案件。對於每個xts元素(在這種情況下標識爲「IBM」和「GM」),存在名爲「XXX.close」的列(例如,IBM.Close,GM.Close)。我不知道爲什麼我無法獲得正確的語法,或者讓Cl看到關閉的列。
任何幫助表示讚賞。
謝謝。
****編輯/ UPDATE ***
我對樣本向量列表stock_data具有以下結構:
str(stock_data)
List of 2
$ :An ‘xts’ object on 2015-01-05/2015-12-07 containing:
Data: num [1:234, 1:6] 161 160 157 156 158 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:6] "IBM.Open" "IBM.High" "IBM.Low" "IBM.Close" ...
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
List of 2
..$ src : chr "yahoo"
..$ updated: POSIXct[1:1], format: "2015-12-09 16:21:31"
$ :An ‘xts’ object on 2015-01-05/2015-12-07 containing:
Data: num [1:234, 1:6] 35 34.4 35.2 36.1 36.2 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:6] "GM.Open" "GM.High" "GM.Low" "GM.Close" ...
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
List of 2
..$ src : chr "yahoo"
..$ updated: POSIXct[1:1], format: "2015-12-09 16:21:31"
結構是實際矢量是相同的 - 它只是更長的尺寸。
什麼關於'do.call(merge,lapply(stock_data,Cl))'?請注意,你可以用'cbind'替換'merge':'do.call(cbind,lapply(stock_data,Cl))' – agstudy
@agstudy:在我的示例列表中工作,但是當我通過它運行我的大列表失敗時。我得到錯誤:'FUN(X [[i]],...)中的錯誤:下標越界:沒有包含「Close」的列名稱 - 但是當我在我的全局環境中查看絕對顯示IBM.Close等等。我不知道爲什麼它會適用於小列表而不是大列表 - 除非它在壞的股票上失敗時發生某些事情。 – Windstorm1981
錯誤很明顯,你的一個xts沒有關閉。檢查哪一個,你可以做'sapply(stock_data,function(x)sum('Close'%in names(x)))' – agstudy