2013-07-17 4 views
1

R을 사용하여 데이터 마이닝에서 주식 예측 사례 연구를 복제하려고합니다. 두 개 이상의 주식을 처리 할 수 ​​있도록 일부 코드를 루프 내에 배치하려고합니다. . 그러나, 루프 내에서 작동하도록 specifyModel 함수를 가져 오는 방법을 알아낼 수 없습니다. 각 주식에 대한 기술적 인 지표를 계산하고 궁극적으로 무작위 포리스트를 사용하여 가장 유용한 지표를 선택하려고합니다. 다음은 몇 가지 예제 코드입니다.루프 내에서 quantmod 패키지의 specifyModel 사용

library(quantmod) 

# The list of stocks I want to investigate 
stock.symbols = c("MMM", "IBM") 

# Download daily stock prices to global environment 
getSymbols(stock.symbols, src = "yahoo", quotes = c("Open", "High", "Low", "Close", "Volume", "Adjusted"), from = "2011-01-01", to = "2012-01-01") 

# "Custom" indicator functions 
myAroon = function(x) aroon(Cl(x))[,1] 
myADX = function(x) ADX(HLC=x)[,4] 

# Try to create quantmod model for each stock 
for(i in stock.symbols) 
{ 
    my.model = specifyModel(Cl(MMM) ~ myAroon(MMM) + myADX(MMM)) # this line works - looks up MMM in global environment 
    # my.model = specifyModel(Cl(i) ~ myAroon(i) + myADX(i)) # I would like something like this 
} 

나는 당신이 그 기호, 예를 들어 "MMM"에 의해 주식을 참조하면, specifyModel가 현재 작업 공간에서 그것을 보이는 것으로 알고 있습니다. 나는 이것을 더 일반적인 것으로 만드는 법을 알고 싶다.

no applicable method for 'as.xts' applied to an object of class "character" 

내가 specifyModel에 대한 문서를 통과 시도했지만 아무 소용 (세계에서 가장 널리 사용되는 기능이 될 것 같지 않습니다) : 분에 나는 다음과 같은 오류를 얻고있다. 나는 또한 get()과 as.name()을 사용해 보았다. 나는 내가 여기에서 완전히 틀린 무엇인가하고 있을지도 모른다라는 것을 깨달았다. 그래서 사전에 사과한다! 어떤 도움이라도 대단히 감사하겠습니다.

답변

1

get을 사용하면 저에게 효과적입니다.

my.model <- list() 
for(i in stock.symbols) 
{ 
    stock <- get(i) 
    my.model = c(my.model, specifyModel(Cl(stock) ~ myAroon(stock) + myADX(stock))) 
} 

lapply(my.model, function(x) head([email protected])) 
+0

FALSE으로 감사를 지정! 그게 내가 원했던 것 같다. 나는 Cl (get (i))과 같은 것을 사용했는데, R을 어떻게 든 혼란스럽게 만든다. 신속한 대응에 다시 한번 감사드립니다. – NoneMoreBlack

0

그냥 그림자의 대답을 대체/보완, 당신은에 결과를 저장하기 위해 자신의 환경을 지정할 수 있습니다 :

data.env <- new.env() 
getSymbols(stock.symbols, env=data.env, src = "yahoo", 
    quotes = c("Open", "High", "Low", "Close", "Volume", "Adjusted"), 
    from = "2011-01-01", to = "2012-01-01") 

for(i in stock.symbols){ 
    stock <- get(i,env=data.env) 
    ... 
    } 

이의 장점은 없습니다 : 재정의) 청소기 (기회 귀하의 현재 환경에서 뭔가); b) 미래 보장. 문서에서는 quantmod 0.5에서 getSymbols의 기본 동작이 변경 될 것이라고 말합니다.

새로운 기본 동작은 환경에 데이터를 쓰는 대신 데이터를 반환하는 것입니다. 당신은 하나의에 의해 지금 동작을 얻을 수 있습니다 : NULL로

  • 패스 ENV는
  • 패스 auto.assign = 옵션 파일에서
  • FALSE가 getSymbols.auto.assign
+1

0.5에서 데이터를 환경에 저장하려면'loadSymbols()'를 사용하고, 데이터를 반환하려면'getSymbols()'를 사용하는 것이 좋을 것이라고 생각합니다. – GSee

+0

감사합니다. 나는 실제 코드에서 별도의 환경을 사용하고 있었지만 단순화를 위해 위의 예에서이를 생략했습니다. – NoneMoreBlack