如何避免三个循环

时间:2018-10-19 18:34:02

标签: r loops mapply

我有以下数据:

C <- matrix(c(1, 1, 1,
              1, 1, 1,
              1, 0, 1), ncol = 3, byrow=  T)

n <- ncol(C)

iter <- 20

Gn <- matrix(nrow = iter, ncol = n)
Gn[1, ] <- rep(1 / n, n)

nCn <- matrix(nrow = iter, ncol = n)

这是我的实现:

for (i in 2:iter) {

  for (j in 1:n) {
    nCn[i, j] <- sum(C[j,] / Gn[i - 1, ])
  }

  nCn[i, ] <- nCn[i, ] * sum(1 / nCn[i, ])

  for (k in 1:n) {
    Gn[i, k] <- sum(C[k,] / nCn[i, ])
  }

  Gn[i, n] <- Gn[i, n - 1]
}  

我正在尝试使用mapply或其他有效形式来避免这些(慢速)循环。我尝试了以下失败的尝试:

nCn <- matrix(unlist(mapply(FUN = function(i, j){
  nCn[i, j] <- sum(C[j, ] / Gn[i - 1, ])
  nCn[i, ] <- nCn[i, ] * sum(1 / nCn[i, ])
  Gn[i, j] <- sum(C[j, ] / nCn[i, ])
  },
  2:N.iter, 1:n)), nrow = n, ncol = n, byrow = TRUE)

有什么想法吗?

0 个答案:

没有答案