Как мне сделать вложенный для l oop в R, который умножает X & X? - PullRequest
1 голос
/ 25 января 2020

Так что я пытаюсь сделать вложенное для l oop, которое будет кратно 1: 100 с 1: 100 (10000 возможных комбинаций). Итак, 1 * 1, 1 * 2 ... 1 * 100. Как только оно достигнет 100, я хочу, чтобы оно повторилось, поэтому 2 * 1, 2 * 2, 2 * 100.

Примечание: мне нужно чтобы сделать это, используя для циклов

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)
  }
}

Вот мой код выше. Кажется, это легко исправить, но я что-то упустил ..

1 Ответ

1 голос
/ 25 января 2020

Мы можем использовать outer

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

. Он может быть преобразован в 3-колоночный data.frame с melt

library(reshape2)
out2 <- melt(out)

В for l oop, нам нужно

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 l oop

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