2017-07-19 7 views
4

wavemulcorパッケージ、特にwave.multiple.cross.correlation関数を使用して、データに複数のウェーブレット相互相関を実行したいと考えています。Wavemulcorパッケージ - wave.multiple.cross相関関数 - 置き換えの長さがゼロ

私は、パッケージのマニュアルに従ってこの例に従っていますが、代わりに自分のデータを使用しています。この関数はサンプルデータで動作しますが、私が試してみるとエラーになります。エラーは "置換長さゼロ"を参照していますが、これはexaclyが何を意味するのか不明です。

私はグーグルでエラーを報告しましたが、さまざまな機能について同じ問題の例が多く、一般的にはコード内のループと関連があります。

次に、問題のトラブルシューティングを行い、デバッグについてお読みください。私はコードをデバッグしようとしましたが、どこが故障しているのか分かりません。コード作成の初期段階にあります。私はそれが問題を引き起こしているwave.multiple.cross.correlation関数のコードのこの部分かもしれないと思う:

xy.cor.vec <- matrix(unlist(xy.cor), l, dd) 
    xy.mulcor <- matrix(0, l, 2 * lm + 1) 
    YmaxR <- vector("numeric", l) 
    for (i in 1:l) { 
     r <- xy.cor.vec[i, ] 
     P <- diag(d)/2 
     P[lower.tri(P)] <- r 
     P <- P + t(P) 
     Pidiag <- diag(solve(P)) 
     if (is.null(ymaxr)) { 
      YmaxR[i] <- Pimax <- which.max(Pidiag) 
     } 

これが動作しない理由を私は決定することができ、他の方法はありますか?

次のように実際のエラーがある:

> Lst <- wave.multiple.cross.correlation(xx, lag.max = NULL, ymaxr = NULL) 
Error in YmaxR[i] <- Pimax <- which.max(Pidiag) : 
    replacement has length zero 

私は元のコードですべての変数をトレースすることを試みたが、私はそれを把握することはできません。

これは私が使用しようとしていますコードで、完全酒のためにhereは、私が使用したい変数のリストであるXXのdputへのリンク()で、xxは

の詳細については、以下のコードを参照してください
library(wavemulcor) 
library(readxl) 

rm(list = ls()) # clear objects 
graphics.off() # close graphics windows 

RNC20_30Hourly <- read_excel(RNC20_30Hourly.xlsx") 

RNC20_30Hourly <- RNC20_30Hourly[-1] 

RNC20_30TS <- ts(RNC20_30Hourly, start = 1, frequency = 23) 

wf <- "d4" 
J <- 6 
lmax <- 36 

n <- nrow(RNC20_30TS) 

CK0158U09A3.modwt <- modwt(RNC20_30TS[,"CK0158U09A3"], wf, J) 
CK0158U09A3.modwt.bw <- brick.wall(CK0158U09A3.modwt, wf) 

CK0158U21A1.modwt <- modwt(RNC20_30TS[,"CK0158U21A1"], wf, J) 
CK0158U21A1.modwt.bw <- brick.wall(CK0158U21A1.modwt, wf) 

CK0158U21A2.modwt <- modwt(RNC20_30TS[,"CK0158U21A2"], wf, J) 
CK0158U21A2.modwt.bw <- brick.wall(CK0158U21A2.modwt, wf) 

CK0158U21A3.modwt <- modwt(RNC20_30TS[,"CK0158U21A3"], wf, J) 
CK0158U21A3.modwt.bw <- brick.wall(CK0158U21A3.modwt, wf) 

xx <- list(CK0158U09A3.modwt.bw, 
      CK0158U21A1.modwt.bw, 
      CK0158U21A2.modwt.bw, 
      CK0158U21A3.modwt.bw) 

Lst <- wave.multiple.cross.correlation(xx, lag.max = 13, ymaxr = NULL) 

CK0158.RTWP.cross.cor <- as.matrix(Lst$xy.mulcor[1:J,]) 
YmaxR <- Lst$YmaxR 

cell.names <- c("CK0158U09A3", "CK0158U21A1", "CK0158U21A2", "CK0158U21A3") 
rownames(CK0158.RTWP.cross.cor)<-rownames(CK0158.RTWP.cross.cor, 
              do.NULL = FALSE, prefix = "Level ") 
lags <- length(-lmax:lmax) 

lower.ci <- tanh(atanh(CK0158.RTWP.cross.cor) - qnorm(0.975)/
        sqrt(matrix(trunc(n/2^(1:J)), nrow=J, ncol=lags)- 3)) 
upper.ci <- tanh(atanh(CK0158.RTWP.cross.cor) + qnorm(0.975)/
        sqrt(matrix(trunc(n/2^(1:J)), nrow=J, ncol=lags)- 3)) 

par(mfrow=c(3,2), las=1, pty="m", mar=c(2,3,1,0)+.1, oma=c(1.2,1.2,0,0)) 
for(i in J:1) { 
    matplot((1:(2*lmax+1)),CK0158.RTWP.cross.cor[i,], type="l", lty=1, ylim=c(-1,1), 
      xaxt="n", xlab="", ylab="", main=rownames(CK0158.RTWP.cross.cor)[[i]][1]) 
    if(i<3) {axis(side=1, at=seq(1, 2*lmax+1, by=12), 
       labels=seq(-lmax, lmax, by=12))} 
    #axis(side=2, at=c(-.2, 0, .5, 1)) 
    lines(lower.ci[i,], lty=1, col=2) ##Add Connected Line Segments to a Plot 
    lines(upper.ci[i,], lty=1, col=2) 
    abline(h=0,v=lmax+1) ##Add Straight horiz and vert Lines to a Plot 
    text(1,1, labels=cell.names[YmaxR[i]], adj=0.25, cex=.8) 
} 
par(las=0) 
mtext('Lag (hours)', side=1, outer=TRUE, adj=0.5) 
mtext('Wavelet Multiple Cross-Correlation', side=2, outer=TRUE, adj=0.5) 

この問題の解決/トラブルシューティングのお手伝いをしていただければ幸いです。

答えて

2

コードを細かい櫛でレビューしたところ、私のコードでエラーが見つかった。次のように使用がマニュアルに従って:

wave.multiple.cross.correlation(xx, lag.max = NULL, ymaxr = NULL) 

未だ提供された例では、著者は、使用するラグを指定LMAXと呼ばれる別の変数を使用します。

Lst <- wave.multiple.cross.correlation(xx, lmax) 

私は遅れのための2つの異なる引数を指定した上で、あなたが私の例からわかるように、LMAXは= 36とlag.max = 13

よくああ、それは私だけ100評判の費用がかかります!

関連する問題