【问题标题】:Double Summation using for loop使用 for 循环进行双重求和
【发布时间】:2018-01-01 21:18:48
【问题描述】:

我正在尝试对 R 中一个相当复杂的公式进行双重求和,但我认为 for 循环没有像我预期的那样工作。

这只是我正在尝试做的复杂事情的基本版本。

\sum_{I=3}^{5}\sum_{j=2}^{3} (I*j)

我希望这会将所有术语加在一起,例如 3*2+3*3+4*2+4*3+5*2+5*3 这将给出 60。但是我所拥有的代码并没有产生这样的结果,所以想知道 R 实际上用这个双 for 循环做了什么。

 for(i in 3:5){
 for(j in 2:3){
   x<-i*j
     }
    }

我知道这个例子是微不足道的,但如果我能理解这一点,希望能够将它应用到我正在尝试做的更复杂的事情上。

【问题讨论】:

  • 可以使用内置函数,例如sum(outer(3:5, 2:3, "*"))
  • 你需要x = x + i*j并将x初始化为0
  • 目前,您的for 循环只是一遍又一遍地重写您的x 对象,最后一个恰好是x &lt;- 5*3

标签: r for-loop sum


【解决方案1】:

给定

x <- 3:5
y <- 2:3

你可以把它当作

out <- integer()
for(i in x){
  for(j in y){
    out <- c(out, i*j)
  }
}
sum(out)

或者,正如上面所累积的向量(这可能很昂贵),或者

with(expand.grid(x, y), sum(Var1*Var2))

sum(x %o% y) 这是sum(outer(x,y)) 的另一种方式

【讨论】:

    【解决方案2】:

    您忘记在每个循环中添加 x:

    x <- 0
    for(i in c(3,4,5)){
      for(j in c(2,3)){
        x <- x + i*j # add x here
      }
    }
    x
    

    编辑:这与@G5W 所说的相同

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      相关资源
      最近更新 更多