2013-03-21 4 views
4

나는 여러 시세에 대한 quantmod의 getSymbols 기능 역사적 가격을 다운로드 목록 또는 다음 코드를 사용하여 다변량 XTS 중 하나로 변환 :getSymbols를 사용하여 가격 집합을 다운로드하고 요청 된 순서대로 저장할 수 있습니까?

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는 임의의 순서로 작업을 수행하기 때문에의 도움말 페이지에 설명 된대로이, 생각:

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

어떻게 위와 같은 작업을 수행하지만 내 tickers 벡터에 규정 된 순서에 출력을 할 수 있습니까? 나는. XTS의 목록/첫 번째 열의 첫 번째 항목은 tickers 벡터의 첫 번째 요소와 일치해야합니다.

+0

'ticker <- c ("GSPC", "AAPL", "MSFT", "GOOG", "RUT")를 시도하십시오. namesll <- c ("AAPL", "GSPC", "GOOG", "RUT", "MSFT"); namesll [order (tickers)]'. –

답변

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]) 
2

eapply 대신 mget을 시도하십시오. 참고 : 을 ^을 티커 이름에서 제거하여 object 이름이 myenv이되도록해야합니다.

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"