【问题标题】:How to create vector from nested for loops in R?如何从 R 中的嵌套 for 循环创建向量?
【发布时间】:2021-12-08 02:29:26
【问题描述】:

我可以知道是否有办法将结果作为来自这个嵌套 for 循环的向量打印出来?

for(i in 0:3){
  for(j in 1:3){
    print(0.03*(i-1)+exp(-j))
  }
}

【问题讨论】:

  • 你的意思是你不想打印每个输出?而是只有最终名单?
  • rowSums(expand.grid(0.03*((0:3) -1) ,exp(-(1:3))))

标签: r for-loop vectorization


【解决方案1】:

由于您想将其打印为矢量,我想您只想在 for 循环结束时打印一次。您可以做的是创建一个空向量并为每次迭代填充更多数据,如下所示:

v <- c()
for(i in 0:3){
  for(j in 1:3){
    v <- c(v, 0.03*(i-1)+exp(-j))
  }
}
print(v)

或者,您可以使用 rbind() 而不是 c() 创建 12x1 矩阵而不是向量

【讨论】:

    【解决方案2】:

    你是这个意思吗?

    i <- rep(0:3, each=3)
    j <- rep(1:3, times=4)
    0.03*(i-1)+exp(-j)
    [1] 0.33787944 0.10533528 0.01978707 0.36787944 0.13533528 0.04978707 0.39787944 0.16533528 0.07978707 0.42787944 0.19533528 0.10978707
    

    R 是矢量化的,因此对于这样的简单任务,无需使用循环。

    【讨论】:

    • 无需“手动”复制。使用outer。类似:outer(0:3-1, -(1:3), function(x, y) 0.03*x+exp(y)).
    【解决方案3】:

    保持格式不变且不使用rbind:

    output <- c()
    k<- 1
    
    for(i in 0:3){
      for(j in 1:3){
        (0.03*(i-1)+exp(-j))-> output[k]
        k<- k+1
      }
    }
    

    这将导致:

    > output
     [1] 0.33787944 0.10533528 0.01978707 0.36787944 0.13533528 0.04978707 0.39787944 0.16533528
     [9] 0.07978707 0.42787944 0.19533528 0.10978707
    

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2020-01-29
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多