2012-06-21 9 views
6

quantmod :: chart_Series()を使用してSPXをグラフ化したいと思います.GDPの変更とGDPの変更の12か月のSMAの変更を示します。どのように(私はどのような組み合わせを使用する)しようとしても、エラーが発生するかquantmod :: chart_Series()は部分的なプロットを表示します。quantmod :: chart_Series()バグ?

require(quantmod) 

FRED.symbols <- c("GDPC96") 

getSymbols(FRED.symbols, src="FRED") 
SPX <- getSymbols("^GSPC", auto.assign=FALSE, from="1900-01-01") 

subset="2000/" 

chart_Series(SPX, subset=subset) 
add_TA(GDPC96) 
add_TA(ROC(GDPC96, type="discrete")) 
add_TA(SMA(ROC(GDPC96, type="discrete"), n=4), on=3, col="blue") 

EDIT:実際に、これがquantmodであるように私には思える:: chart_series()問題の四半期データを使用している場合:

subset <- "2000/" 
chart_Series(to.quarterly(SPX, drop.time=TRUE), subset=subset) 
add_TA(SMA(Cl(to.quarterly(SPX, drop.time=TRUE)))) 

> subset <- "2000/" 
> chart_Series(to.quarterly(SPX, drop.time=TRUE), subset=subset) 
> add_TA(SMA(Cl(to.quarterly(SPX, drop.time=TRUE)))) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 

これは、メインパネル上のSPXプロットを生成しますが、空のままに第2および第3のパネル。

> chart_Series(head(to.quarterly(SPX, drop.time="TRUE"), -1), subset=subset) 
> add_TA(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 
> add_TA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete")) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 
> add_TA(SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4), on=3, col="blue") 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 

は、すべてがよさそうだ

tail(to.quarterly(SPX, drop.time="TRUE")) 
tail(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)) 
tail(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete")) 
tail(SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4)) 

dput(to.quarterly(SPX, drop.time="TRUE")) 
dput(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)) 
dput(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete")) 
dput(SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4)) 

を使用する: はその後、私は同じデータ等のインデックス、同じ長さ

chart_Series(head(to.quarterly(SPX, drop.time="TRUE"), -1), subset=subset) 
add_TA(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)) 
add_TA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete")) 
add_TA(SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4), on=3, col="blue") 

し、その結果を持って遊ぶことを試みたすべての上のエラーです私に。

私のSessionInfo():これらの問題に対する解決策になるかもしれないもの

> sessionInfo() 
R version 2.15.0 (2012-03-30) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8   LC_NUMERIC=C     
[3] LC_TIME=en_US.UTF-8   LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8  LC_MESSAGES=en_US.UTF-8  
[7] LC_PAPER=en_US.UTF-8   LC_NAME=en_US.UTF-8   
[9] LC_ADDRESS=en_US.UTF-8  LC_TELEPHONE=en_US.UTF-8  
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] quantmod_0.3-18 TTR_0.21-0  xts_0.8-7  zoo_1.7-7  
[5] Defaults_1.1-1 rj_1.1.0-4  

loaded via a namespace (and not attached): 
[1] grid_2.15.0 lattice_0.20-0 tools_2.15.0 

任意のアイデア?

EDIT:これはquantmod :: chart_Series()バグのようです。私がこれを行う場合:

subset <- "1990/" 
test <- cbind(head(to.quarterly(SPX, drop.time="TRUE"), -1)[subset], 
      to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)[subset], 
      ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE),  type="discrete")[subset], 
      SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4)[subset]) 

test$test <- 1 

subset <- "2000/" 
chart_Series(OHLC(test), subset=subset) 
add_TA(test$test) 
add_TA(test$GDPC96) 

> test$test <- 1 
> subset <- "2000/" 
> chart_Series(OHLC(test), subset=subset) 
> add_TA(test$test) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 
> add_TA(test$GDPC96) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 
> traceback() 
14: stop("'x' and 'y' lengths differ") at chart_Series.R#510 
13: xy.coords(x, y) at chart_Series.R#510 
12: plot.xy(xy.coords(x, y), type = type, ...) at chart_Series.R#510 
11: lines.default(ta.x, as.numeric(ta.y[, i]), col = col, ...) at chart_Series.R#510 
10: lines(ta.x, as.numeric(ta.y[, i]), col = col, ...) at chart_Series.R#510 
9: plot_ta(x = current.chob(), ta = get("x"), on = NA, taType = NULL, 
     col = 1) at replot.R#238 
8: eval(expr, envir, enclos) at replot.R#238 
7: eval(aob, env) at replot.R#238 
6: FUN(X[[12L]], ...) at replot.R#230 
5: lapply(x$Env$actions, function(aob) { 
     if (attr(aob, "frame") > 0) { 
      x$set_frame(attr(aob, "frame"), attr(aob, "clip")) 
      env <- attr(aob, "env") 
      if (is.list(env)) { 
       env <- unlist(lapply(env, function(x) eapply(x, eval)), 
        recursive = FALSE) 
      } 
      eval(aob, env) 
     } 
    }) at replot.R#230 
4: plot.replot(x, ...) 
3: plot(x, ...) 
2: print.replot(<environment>) 
1: print(<environment>) 

これを解決するためのアイデアはありますか?

答えて

3

データのマッサージをしても問題がないことを確認し、さらに古いchartSeries機能を使用しても、長い「回答」が書かれました。その後、私はadd_TA()がおそらく間違った機能であることに気付きました。このアプローチは動作します:

par(mfrow=c(2,1)) 
chart_Series(SPX) 
chart_Series(GDPC96) 

layoutコマンドを使用して別のアプローチのためのR/quantmod: multiple charts all using the same y-axisを参照してください。)

またはサブセットとを:。

par(mfrow=c(2,1)) 
chart_Series(SPX,subset="2000/") 
chart_Series(GDPC96,subset="2000/") 

(NB 2つのデータセットは、別の場所で終了しますしたがって、あまり整列していません)。

ちなみに、四半期ごとのデータを持つchart_Seriesには明確なバグが1つあります.x軸ラベルlo "%n%b%n2010"のようにOKです。

q.SPX=to.quarterly(SPX) 
chart_Series(q.SPX) 
+2

ニースを回避します。Re:軸ラベルの書式設定のバグですが、問題は 'zoo ::: format.yearqtr'は'%n' _conversion指定_をサポートしていないということです。 'chart_Series'は汎用の' format'を使う 'xts ::: axTicksByTime'を使います。 'to.quarterly'はインデックスに' yearqtr'のクラスを与えたので、 'format'は'%n'を含む文字列で 'format.yearqtr'を送出します(OSによって異なります)。ユーザーレベルでこれを回避する方法は、インデックスクラスを変更することです: 'indexClass(q.SPX)< - " Date "; chart_Series(q.SPX) ' – GSee

5

私は数日前に同様のエラーが発生しました。

ta.x <- as.numeric(na.approx(ta.adj[, 1])) 

na.approxは=約ルールを使用して、デフォルトでは1、元のデータの最後のタイムスタンプが最後の前にある場合は、リストの末尾のNAを残し:私はこの問題は、行とadd_TAしていたことがわかりましたTAデータのタイムスタンプ。ルール= 2を設定するようにその行を変更すると、問題が修正されました。

ta.x <- as.numeric(na.approx(ta.adj[, 1], rule=2)) 
+0

[r581]のSVNに適用されています(https://r-forge.r-project.org/scm/viewvc.php/pkg/R/chart_Series.R?view=markup&revision=581&root= quantmod)。ありがとう@ Michael741。 –

+0

ようこそ、Maddogg! :) – GSee

+0

+1、残念ながら、SPXがGDPC96よりも高い周波数の@ Samoの最初の例ではまだ動作しません。しかし、 'to.quarterly'の両方を変換するのは非常に簡単な回避策です。また、パッチされたコードは '.parseISO8601'のローカルな' parse.side'関数からの 'as_numeric(H)'から多くの警告をスローします。 (ええ、ええ、私は知っている、彼らはただの警告です) – GSee