2015-02-01 3 views
0

저는 새로운 R 프로그래머이며 ETF 가격 매트릭스를 하루 작성하려고합니다.행렬에 가격 데이터로드 중 R

#Download Packages 
library(tseries) 
library(quantmod) 
#Setup list of symbols to download prices 
pr=c("vti","vv","vug","vtv","vo")  
#get dates to download data 
today=as.Date(Sys.Date()) 
yday=today-1 
#set up matrix to hold data 
pri=matrix(nrow=10,ncol=5) 
for(i in 1:10){ 
for(j in 1:5) { 
    pri[i,j]=get.hist.quote(instrument=pr[j],start=yday,quote="AdjClose",provider="yahoo",compression="d") 
} 
yday=yday-1} 
    write(pri,"ETFData13115.ods",ncolumns=5,nrows=10,append=TRUE,sep="\t") 
여기

I 출력 및 오류 메시지 얻고있다 :

Error in pri[i, j] = get.hist.quote(instrument = pr[j], start = yday, : 
    number of items to replace is not a multiple of replacement length 
> write(pri,"ETFData13115.ods",ncolumns=5,nrows=10,append=TRUE,sep="\t") 
Error in write(pri, "ETFData13115.ods", ncolumns = 5, nrows = 10, append = TRUE, : 
    unused argument (nrows = 10) 
> print(pri) 
     [,1] [,2] [,3] [,4] [,5] 
[1,] 103.1 91.6 102.8 81.03 121.08 
[2,] NA NA NA NA  NA 
[3,] NA NA NA NA  NA 
[4,] NA NA NA NA  NA 
[5,] NA NA NA NA  NA 
[6,] NA NA NA NA  NA 
[7,] NA NA NA NA  NA 
[8,] NA NA NA NA  NA 
[9,] NA NA NA NA  NA 
[10,] NA NA NA NA  NA 

내가 잘못 뭐하는 거지 여기에 내가 사용하고있는 코드는? 내 매트릭스를 더 쉽게 조립할 수 있습니까?

도움 주셔서 감사합니다. 로버트 S

당신은 할당 연산자를 사용하는 것이 좋습니다

답변

0

:

pri[i,j] <- get.hist.quote(...) 

UPDATE :

하는

a <- get.hist.quote(instrument=pr[j], start=yday,quote="AdjClose",provider="yahoo",compression="d") 

우리는 a이 아닌 스칼라 것을 알 수 있습니다 시도 :

> dim(a) 
[1] 2 1 

> a[1,1] 
2015-01-29 
    104.52 
> a[2,1] 
2015-01-30 
    103.1 

그래서 두 데이터를 모두 수용하기 위해 원하는 데이터를 선택하거나 행간을 다시 만들어야 할 것입니다.

+0

감사합니다. 모든 "="기호를 "<"기호로 바꾸었지만 동일한 오류가 발생했습니다. 다른 사람들은? –

+0

켄 - 고마워! > PRI [1,1] [1] 103.1 > PRI [1,2] [1] 91.6 > PRI [2,1] [1 : 그 요소를 인쇄 할 때 아주 이상한,이 수 ] 아니, 그래서 무슨 일인지 모르겠다. 생각해 줘서 고마워. -RS –

0

실제 해결책으로 업데이트되었습니다.

Quantumod는 이미 여러분을 위해 많은 일을하고 있습니다. 주로 getSymbols 명령 만 있으면됩니다.

#Download Packages 
library(tseries) 
library(quantmod) 

#Your code is commented out line by line 

#Setup list of symbols to download prices 
    #pr=c("vti","vv","vug","vtv","vo") 

pr <- c("vti", "vv", "vug", "vtv", "vo") #spaces are your friend 

#you do not need to worry about which dates to select... explained in a second 
#get dates to download data 
    #today=as.Date(Sys.Date()) 
    #yday=today-1 
#set up matrix to hold data 

#you do not need to do this, quantmod does it for you 
    #pri=matrix(nrow=10,ncol=5) 


#you definitely dont need the uter loop loop! 
#for(i in 1:10){ 
#for(j in 1:5) { 
    #get.hist.quote(instrument=pr[j],start=yday,quote="AdjClose",provider="yahoo",#compression="d") 
#} 

#this command gets all the data you want and assigns them to a data frame with ticker symbol 
getSymbols(pr) 

print(VTI[1:2]) #print the last 2 trading days of VTI, note this works even if yesterday was a weekend!!!!!!! 


#write data to individuals csv files 
#for(j in 1:5) { 

write.csv(
    get(toupper(pr[i])), paste(pr[i],"historical-quotes.csv", sep='-')) 

} 
    write(pri,"ETFData13115.ods",ncolumns=5,nrows=10,append=TRUE,sep="\t") 

yday = today-1 모든 날짜가 거래 일이 아니기 때문에 재무 데이터를 잘 사용하지 않습니다. 허용되는 거래일의 벡터를 만든 다음 해당 벡터에서 선택하는 것을 고려해야합니다.

+0

좋은 생각인데, 다음 라운드에서 그렇게 할 것입니다.하지만 외부 루프의 두 번째 반복에 대해 선택한 날이 거래일 이었기 때문에 오류 메시지가 발생했다고 생각하지 않습니다. 메시지를 일으킨 원인에 대한 아이디어가 있습니까? 고마워, 로버트 S –