Более короткая альтернатива вложенным циклам - PullRequest
1 голос
/ 05 октября 2019

Я выполняю небольшой расчет для вычисления pij (см. Ниже), используя 2 вложенных цикла for. Однако мне было интересно, если бы вместо 2 вложенных циклов for я мог бы использовать более короткий R код?

X <- data.frame(A = 1:6, B = c(1, 2, 4, 4, 5, 5))

X2 <- X * (X - 1)
  sumcol <- colSums(X)
  sumrow <- rowSums(X)

  pij <- matrix(, nrow = nrow(X), ncol = ncol(X))   ## pij HERE

  for (i in 1:length(sumrow)) {                     ## Nested for loops
    for (j in 1:length(sumcol)) {
      pij[i, j] <- X2[i, j]/(sumrow[i] * (sumrow[i] - 1))
    }
  }

1 Ответ

0 голосов
/ 05 октября 2019

Мы можем напрямую получить необходимую матрицу pij из X, выполнив следующий расчет.

(X * (X - 1))/(rowSums(X) * (rowSums(X) - 1))

#          A         B
#1 0.0000000 0.0000000
#2 0.1666667 0.1666667
#3 0.1428571 0.2857143
#4 0.2142857 0.2142857
#5 0.2222222 0.2222222
#6 0.2727273 0.1818182
...