在R中的for循环期间分配和使用变量

时间:2017-11-29 18:34:41

标签: r for-loop

我有一个数据集,包含大约4000个矢量形式的矩阵,每个矩阵都应该按照它创建的日期命名。

现在我有以下内容:

dates <- unique(rcov_matrix$dateid)

for(k in dates){
  k <- matrix(0, 30, 30)
  for(i in 1:30){
    for (j in 1:i){
      number <- number + 1
      value <- rcov_matrix[1, number]
      k[i,j] <- value
      k[j,i] <- value
    }
  }
}

代码正确地将向量的条目分配给矩阵,但我最终只得到一个名为k的矩阵。 我知道这是因为在R中分配变量名称的方式,但我找不到类似帖子中我的问题的可行解决方案。

assign(k, matrix(0, 30, 30))

不起作用,因为我必须在下一个for循环中重用变量名。

我该如何解决这个问题?或者是否有更有效的方法将我的值分配给矩阵?

谢谢。

1 个答案:

答案 0 :(得分:0)

也许最简单的方法是在循环结束时使用assign,而不是在开头。

for (k in dates){
  This_k <- matrix(0, 30, 30)
  for(i in 1:30){
    for (j in 1:i){
      value <- rnorm(1)  # I use rnorm here to make the example reproducible
      This_k[i,j] <- value
      This_k[j,i] <- value
    }
  }
  assign(k, This_k)
}

或者(可能更高效),您可以将矩阵放在列表中并使用列表索引:

klist = lapply(rep(0, length(dates)), matrix, 30, 30)
names(klist) = dates

for (k in dates){
  for(i in 1:30){
    for (j in 1:i){
      value <- rnorm(1)
      klist[[k]][i,j] <- value
      klist[[k]][j,i] <- value
    }
  }
}