2011-12-19 9 views
1

私はマイナーな量子量の問題に悩まされています。もし誰かが私のコードに微調整を提案できれば、本当に感謝しています。私はそのようなプロガムを知らない。多分それが私が明らかに欠けている理由です。 getSymbolsは文字列を入力(たとえば「YHOO」)しますが、データを保持するxtsオブジェクトとしてYHOO(引用符は不要)を返すため、問題が発生しています。また、マーケットインデックスの場合、ヤフーはコードの文字列にキャレット(例: "^ GSPC")を含めますが、quantmodはデータオブジェクトとしてプレーンGSPCを返します。Quantmodは、ループやラップでファイルにティッカーを保存します

複数のティッカーのデータを個別のバイナリファイルにダウンロードして保存しようとしています。これは、インターネットアクセスを必然的に要求するのではなく、ディスクに格納されたデータから機能する作業環境を作成するためのものです。

私は、関数を書いてみました:それは( "オブジェクトが『(x)を取得』が見つかりません" と言って)コマンドを保存でエラーが出て、その後

require(quantmod) 
tckr <- c("YHOO","XLB") 
lapply(tckr,buildhist,start="1995-01-01",end="2011-11-30") 

を使用

buildhist <- function(x,start,end) { 
    getSymbols(x, from=start, to=end, adjust=TRUE) 
    save(get(x), file= paste(x, "hist.rda", sep="_"), ascii = FALSE) 
} 

しかし。 get(x)を使用しないと、saveコマンドはテロップ名を文字列として保存するだけなので、使用できません。 save(noquote(x), file=paste(x, "hist.rda", sep="_"), ascii=FALSE)などの他のバージョンはどちらも動作しません。

ティッカーデータが、元々quantmodによって返されたのと同じオブジェクト名を使用して保存されるようにするには、どのようなコマンドを使用しますか?上記の私のコードでは、他の問題に取り組もうとしなかった - それが存在すれば、名前からキャレット記号を取り除くこと。それを指し示すポインタは、あまりにも高く評価されるだろう。

答えて

2

更新:下記の解決策は、OPの問題を解決しません(コメントを参照)。ジャンプ後の編集を参照してください。

デフォルトのauto.assign=TRUEは、対話的にgetSymbolsを使用すると簡単になります。関数内でgetSymbolsを使用する場合は、auto.assign=FALSEを設定します。物事をもっと簡単にするでしょう。

句読点の文字(キャレットを含む)は、gsubで削除できます。詳細は、?gsubおよび?regexを参照してください。

X <- gsub("[[:punct:]]","",x) # remove all punctuation 
X <- gsub("\\^","",x)   # remove just the carat 

私は私の最初の答えをテストしていません。この解決法は機能するはずです。

buildhist <- function(x,start,end) { 
    getSymbols(x, from=start, to=end, adjust=TRUE) 
    X <- toupper(gsub("\\^","",x)) # what getSymbols.yahoo does 
    save(list=X, file= paste(X, "hist.rda", sep="_"), ascii = FALSE) 
} 

require(quantmod) 
tckr <- c("^GSPC","YHOO","XLB") 
lapply(tckr,buildhist,start="1995-01-01",end="2011-11-30") 

少数のシンボルで毎日のデータを使用している場合は、すべてのシンボルを1つの環境にロードして環境を保存することができます。それはあなたに多くの問題を救うことができます。次に、環境を新しいセッションにロードして添付し、すべてのデータを指でつかむことができます。

myEnv <- new.env() 
getSymbols(paste(tckr,sep=";"), start="1995-01-01", end="2011-11-30", 
    env=myEnv, adjust=TRUE) 
save(myEnv, file="myTickerData.rda") 
+0

多くの感謝のジョシュア。私はこれを試した。問題は、オブジェクト名がXLBではなくyとして保存されることです。だから、ループでこれを行うと、すべてのティッカーはyとして保存され、ループの中でディスクからロードすると、それらはすべてyになります。私は新鮮なデータをダウンロードした後にデータを再ロードしてアクセスする必要があります。だから、XLBに入るときにデータが必要です。 – Tatha

+0

gsubコマンドへのポインタに感謝します。 – Tatha

+0

私はquantmodを使用していませんが、マニュアルでは 'getSymbols'は何も返さず、環境にアイテムをロードするだけです。だから私は私の下で 'lapply'の私のバージョンを提案したのです。私が間違っているなら、私を訂正してください - 私は人を迷わせたくありません。 –

2

あなたはsummary(YHOO)ような何かを行うことによって成功したあなたのgetSymbolsコールを確認することはできますか? (save(get(x))は "get(x)"という名前のオブジェクトがないので、絶対に書きたくないです。

あなたの問題は、lapplyの適切な使用に関連すると思われます。これは動作します:以下で

+0

はいgetSymbolsは成功し、get(tckr [1])は画面上のすべてのデータを表示します。しかし、あなたは正しいです、それはオブジェクトではありません。 quantmodでは、私が上で提案したようにオブジェクトにgetSymbolsを割り当てることができます。しかし、私は後でsave関数の命名要件に固執します。私は上記のダブルlapplyコードで遊んでみましょう:) – Tatha

1

(あなたがbuildhistないsqrtを使用していると思いますもちろん)

foo <- 5 
oof <- 4 
bar<-c("foo","oof") 
lapply(lapply(bar,get),sqrt) 

は、SymbolListはシンボルを持っているベクトルです。すなわち

SymbolList <- c("IBM","GOOG","YHOO") 

合併

fun <- function(i) {return(adjustOHLC(get(SymbolList[i]),adjust = "split", use.Adjusted=TRUE))} 
mydata <- do.call(merge, lapply(1:length(SymbolList), fun)) 

これは、あなたが他のカップルをデータを与える、これらの使用getSymbols

getSymbols(SymbolList) 

関数を定義し、do.callを使用するために過去のデータを取得します。あなたが使用できるものは、 です。つまり、終了値のみを必要とし、分割の調整が必要な場合です。

fun <- function(i) {return(Cl(adjustOHLC(get(SymbolList[i]),adjust = "split", use.Adjusted=TRUE)))} 

データフレームにもキャストできます。

mydata<-as.data.frame(mydata) 

ここからは、これをcsvファイルに書き込むことができます。

関連する問題