首页 > 解决方案 > 如何在 R 中创建一个将 X 和 X 倍数的嵌套 for 循环?

问题描述

所以我正在尝试做一个嵌套的 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)
  }
}

这是我上面的代码。这似乎是一个简单的修复,但我错过了一些东西..

标签: rloopsnestedrstudio

解决方案


我们可以用outer

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

它可以转换为 3 列 data.frame 与melt

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

或者在一个for循环中

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

推荐阅读