1

这个问题听起来可能与其他问题相似,但是当我检查它们时,它们与我正在寻找的有点不同。下面是我的代码,

Data <- rbind(c(54, 55, 51), c(52, 51, 57))
WMatrix <- rbind(c(0, 1), c(1, 0)) 

for(i in 1:2){
   for(j in 1:2){
      for(t in 1:2){
      print(WMatrix[i,j]*Data[j,t]*Data[i,t+1])
      }
   }
}

此代码的输出是,

[1] 0
[1] 0
[1] 2860
[1] 2601
[1] 2754
[1] 3135
[1] 0
[1] 0

现在,我想从循环中立即生成这个输出的总和(不列出它)。也就是说,循环的输出应该是 11350,这是循环中所有生成的输出的总和。我知道这个问题可能很简单,但我仍在学习基本编程。我试过这个,

for(i in 1:2){
   for(j in 1:2){
      for(t in 1:2){
      print(sum(WMatrix[i,j]*Data[j,t]*Data[i,t+1]))
      }
   }
}

但是,输出仍然相同,有人可以帮助我吗?

谢谢 :)

4

2 回答 2

8

一点点矩阵代数,一步就完成了:

sum(WMatrix * (Data[, -3] %*% Data[, -1]))
[1] 11350

编辑:在 R 中,*运算符执行元素乘法,同时%*%给出矩阵乘积。

于 2012-10-17T13:58:40.703 回答
3

在这里,这完全是低效的,读起来像 C 代码等,但我猜想打印你想要的。如果不知道您在这里实际尝试实现什么,这些操作是什么,我不会优化代码。

编辑:查看更优越的替代答案。@Andrie 实际上猜到了你想做什么。

sum <- 0 
for(i in 1:2){
  for(j in 1:2){
    for(t in 1:2){
      sum <- sum + WMatrix[i,j]*Data[j,t]*Data[i,t+1]
    }
  }
}
print( sum )
于 2012-10-17T13:39:57.257 回答