【问题标题】:How to iterate/loop through multiple numbered variables in R如何在R中迭代/循环多个编号变量
【发布时间】:2015-11-10 20:15:19
【问题描述】:

所以,我是 R 编程新手,所以我什至不知道这是否可行。我有 50 个矩阵(50,000 行 x 10 列)我正在尝试填充蒙特卡洛模拟。我在一个循环中创建了所有矩阵,它们被称为mCMatrix1mCMatrix2 等。

我想在循环中填充矩阵,效果如下:

for (i in 50){
for (j in 50000){
    num <- mu + tR %*% rnorm(10) # returns a 10 row, 1 column matrix
    mCMatrixC"i"[]= num[,1] # basically rotates the matrix to fill in the first row
}
}

我可以通过某种方式对程序进行编码,以知道它需要填充mCMatrix1,然后是mCMatrix2,一直到第50 个矩阵。对于 STATA 用户,我记得您可以使用 with v = forval(range of values), mCMatrix`v' 遍历变量。 (我使用 STATA 已经有一段时间了,所以语法可能不正确,但大意是这样的。

【问题讨论】:

  • 你是如何使用 j 的?最好将它们保存在一个列表中,而不是在您的工作区中有 50 多个对象,例如 mlist &lt;- replicate(50, list(matrix(rnorm(50000 * 10), ncol = 10))) 其中 replicate 是一个循环,创建一个包含您想要的任何值的 50000 x 10 矩阵并返回长度为 50

标签: r loops variables for-loop matrix


【解决方案1】:

您可以构建一个矩阵列表以便于访问并使用以下方法访问它。我不确定您在循环中执行的矩阵运算,因此我选择了一个随机矩阵作为示例。

> list_matrices = c()
> for (i in 1:10) { list_matrices[[i]] = matrix(rnorm(9), nrow=3)}
> list_matrices[[1]]
            [,1]       [,2]        [,3]
[1,] -0.09855292  0.2665513  0.72873888
[2,] -0.03005994 -0.4834303 -1.12356622
[3,]  0.98443875  0.5895932  0.07072777

【讨论】:

    【解决方案2】:

    如果核心问题是生成新的(编号的)变量名并为其赋值,那么我认为您可以使用这种方法:

    for(i in 1:3) 
    {
    n<- sprintf("matr%d",i)
    print(n)
    assign(x=n,value = i)
    }
    matr1
    matr2
    matr3
    

    【讨论】:

      【解决方案3】:

      R 在列表和 data.frames 上运行,这与其他方法有点不同。您最简单的方法是创建一个矩阵名称列表并遍历该列表。

      Rawr 的方法是最简单的,也可能是最有效的。

      然后你只需通过 mlist[n] 访问它,n 是你想要的矩阵。

      如果您想要一个完整的数据框方法,它会稍微复杂一些,但它会提供一个带有索引的数据表,而不是矩阵列表

      library(dplyr)
      yourData <- data.frame()
      
      for (k in 1:50) {
        yourData <- yourData %>% 
          rbind((as.data.frame(matrix(rnorm(50000 * 10), nrow=50000, ncol=10))) %>%    
          mutate(Run = k))
      }
      

      这样你就可以访问它

      yourData %>% filter(Run = n) 
      

      【讨论】:

      • 我认为你根本没有测试过这个
      • 第一次没有。
      猜你喜欢
      • 2020-05-14
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2020-08-15
      相关资源
      最近更新 更多