【问题标题】:How do I make a nested for loop in R that multiples X & X?如何在 R 中创建一个将 X 和 X 倍数的嵌套 for 循环?
【发布时间】:2020-05-11 06:46:32
【问题描述】:

所以我正在尝试做一个嵌套的 for 循环,它将 1:100 和 1:100(10,000 种可能的组合)倍增。所以 1*1, 1*2 ... 1* 100。一旦达到 100,我希望它重复,所以 2*1, 2*2, 2*100。

注意:我需要使用 for 循环来执行此操作

table<-matrix(ncol=3, nrow=100*100)
for (i in 1:100) {
  for (z in 1:100){
    answer<-i*z
    table[i,] <- c(i,z,answer)
  }
}

这是我上面的代码。这似乎很容易解决,但我错过了一些东西..

【问题讨论】:

    标签: r loops nested rstudio


    【解决方案1】:

    我们可以使用outer

    out <- outer(1:100, 1:100)
    

    可以用melt转换成3列data.frame

    library(reshape2)
    out2 <- melt(out)
    

    for循环中,我们需要

    for (i in 1:100) {
       for (z in 1:100){
           answer<-i*z
           table[i, z] <- answer
       }
      }
      table[i, z] <- answer
    

    在哪里

    table <- matrix(nrow = 100, ncol = 100)
    

    检查输出

    all.equal(out, table)
    #[1] TRUE
    

    如果我们需要'i','z'

    out2 <- transform(expand.grid(i = 1:100, z = 1:100), answer = i * z)
    

    或者crossing

    library(tidyr)
    library(dplyr)
    crossing(i = 1:100, z = 1:100) %>%
       mutate(answer = i * z)
    # A tibble: 10,000 x 3
    #       i     z answer
    #   <int> <int> <int>
    # 1     1     1     1
    # 2     1     2     2
    # 3     1     3     3
    # 4     1     4     4
    # 5     1     5     5
    # 6     1     6     6
    # 7     1     7     7
    # 8     1     8     8
    # 9     1     9     9
    #10     1    10    10
    # … with 9,990 more rows
    

    或者在forloop中

    table1 <- c()
    for(i in 1:100) {
       for(z in 1:100){
          table1 <- rbind(table1, c(i, z, i * z))
        }
     }
    

    【讨论】:

    • 感谢 akrun,但是,这并不是我真正想做的。我希望桌子上有 i、z、回答 1 1 1 2 1 2 ... 等
    • @Bailey 在你的描述中,它说1*1, 1*2 ... 1* 100. Once it reaches 100, I want it to repeat, so 2*1, 2*2, 2*100
    • 感谢 Akrun 的回答,但我希望它有 3 列,以 i,z,answer 作为列标题
    • @Bailey 更新帖子
    • 感谢@akrun,你太棒了。你能解释为什么第一个代码不起作用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2017-11-14
    • 2016-05-09
    • 2011-12-15
    • 2015-07-29
    • 1970-01-01
    相关资源
    最近更新 更多