4

複数のティッカーの quantmodgetSymbols関数を使用して過去の価格をダウンロードし、次のコードを使用してリストまたは多変量 XTS に変換します。

library(quantmod)

myenv <- new.env()
tickers <- c("^GSPC", "AAPL", "MSFT", "GOOG", "^RUT")
getSymbols(tickers, env=myenv)
ll <- eapply(myenv, function(x) x)        # Convert to list
ts <- do.call(merge, (eapply(myenv, Ad))) # Convert to multivariate XTS and extract only the adjusted price

このアプローチの問題点は、リスト内のティッカーの順序と XTS が で指定した順序と同じでないことですtickers

> names(ll)
[1] "AAPL" "GSPC" "GOOG" "RUT"  "MSFT"
> names(ts)
[1] "AAPL.Adjusted" "GSPC.Adjusted" "GOOG.Adjusted" "RUT.Adjusted" 
[5] "MSFT.Adjusted"

eapplyこれは、次のヘルプ ページで説明されているように、操作がランダムな順序で実行されるためだと思いますeapply

Note that the order of the components is arbitrary for hashed environments.

tickers上記と同じ操作を実行して、ベクトルで指定された順序と同じ順序で出力するにはどうすればよいですか? つまり、リストの最初の項目/XTS の最初の列は、tickersベクトルの最初の要素に対応する必要があります。

4

2 に答える 2

4

の結果を必要な順序にサブセット化できeapplyます。

library(quantmod)
tickers <- c("^GSPC", "AAPL", "MSFT", "GOOG", "^RUT")
myenv <- new.env()
symnames <- getSymbols(tickers, env=myenv)  # getSymbols returns adjusted names
ts <- do.call(merge, eapply(myenv, Ad)[symnames])
于 2013-03-21T12:37:04.103 に答える
2

mgetの代わりに試してくださいeapply。注: で名前を取得するには、ティッカー名から削除するために を使用する必要がありgsubます。^objectmyenv

library(quantmod)

myenv <- new.env()
tickers <- c("^GSPC", "AAPL", "MSFT", "GOOG", "^RUT")
getSymbols(tickers, env = myenv)
## [1] "GSPC" "AAPL" "MSFT" "GOOG" "RUT" 

test <- mget(gsub("\\^", "", tickers), envir = myenv)
ts <- do.call(merge, lapply(test, Ad))
names(ts)
## [1] "GSPC.Adjusted" "AAPL.Adjusted" "MSFT.Adjusted" "GOOG.Adjusted" "RUT.Adjusted" 

tickers
## [1] "^GSPC" "AAPL"  "MSFT"  "GOOG"  "^RUT" 
于 2013-03-21T08:05:29.437 に答える