1

在尝试了我正在尝试制作的功能的几种编码变体之后,我仍然没有成功。这是下面的等式,我希望在 R 中对其进行函数处理,

在此处输入图像描述

编辑:s这里当然小于T

此外,这两个矩阵显示了 wij、zj(t) 和 zi(t+s) 的来源。

在此处输入图像描述

因此,wij = w12 等于 wmatrix 中的 w1,2。类似地,zj(t) = z2(1) 等于 datamat 中的 a2,1。同样,i=j。因此,如果 i=1,t=1 和 s = 1,那么我们有 zi(t+s) = z1(1+1) = z1(2),它等于数据矩阵中的 a1,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 回答