1

私が作成しようとしている関数からコーディングのいくつかのバリエーションを試した後でも、私は成功していません。これが私がRでそれの関数を作りたいと思う以下の方程式です、

ここに画像の説明を入力してください

編集:ここでのsはもちろんT未満です

また、wij、zj(t)、およびzi(t + s)がどこから取得されるかを示す2つの行列があります。

ここに画像の説明を入力してください

したがって、wij = w12は、wmatrixのw1,2に等しくなります。同様に、zj(t)= z2(1)は、データマットのa2,1と同じです。繰り返しますが、i=jです。したがって、i = 1、t = 1、およびs = 1の場合、データマットマトリックスのa1,2に等しいzi(t + s)= z1(1 + 1)= z1(2)になります。

さて、これが私が最終的に得たコードです、

st.acf <- function(datamat, wmatrix,ss){
          a = dim(datamat)[1]
          b = dim(datamat)[2]
          sumn <- 0 
          for(i in 1:a){
             for(j in 1:a){
                for(t in 1:b-ss){
                    sumn <- sumn + wmatrix[i,j]*datamat[j,t]*datamat[i,t+ss]
                }
             }
          }
          print(sumn/sqrt(sum((wmatrix%*%datamat)^2)*sum(datamat^2)))
      }

手動で計算した例を使用しました。これがそのデータです。

DataMatrix <- rbind(c(54, 55, 51), c(52, 51, 57))
WeightsMatrix <- rbind(c(0, 1), c(1, 0)) 

これの答えは0.66389であるはずです。しかし、関数を使用すると、その出力には。が表示されますnumeric(0)

st.acf(DataMatrix, WeightsMatrix, 1)
numeric(0)

これを理解できません。ループを実行すると、関数内のすべてのコードが正しくなり、sqrt(sum((wmatrix%*%datamat)^ 2)* sum(datamat ^ 2))が個別に取得されます。正しい答え。しかし、それらをマージして関数を作成しようとすると、常にが得られnumeric(0)ます。誰でもこれについて私を助けることができます。

よろしくお願いします!

4

1 に答える 1

4

Rでは、:演算子はバイナリよりも優先され-ます。これは、を使用する場合は、1:b-ssと同等である(1:b)-ssことを意味します1:(b-ss)。コードにその変更を加えると、期待どおりの結果が得られます。

演算子の優先順位の詳細については、を参照してください?Syntax

于 2012-10-18T13:18:07.090 に答える