使用for循环计数器识别R中的矩阵

时间:2017-01-18 14:31:13

标签: r for-loop matrix

我正在运行一些OLS估算的蒙特卡罗模拟,其中我针对不同的β值进行了相同模拟的几个版本。要做到这一点,我已经设置了一个for循环来运行模拟(它有1000次重复),并围绕它设置第二个循环,我想在其中分配beta值。

所以,我已经设置了4个矩阵来存储每个模拟版本的结果,我想确定使用for循环计数器写入哪个矩阵。

以下是我的设置的一个简单示例:

reps = 1000
mat1 = matrix(NA, nrow=reps, ncol=2)
mat2 = matrix(NA, nrow=reps, ncol=2)
mat3 = matrix(NA, nrow=reps, ncol=2)
mat4 = matrix(NA, nrow=reps, ncol=2)

for(i in 1:4){
    #Here I am going to alter my beta values for each iteration of i
    for(j in 1:reps){
        #Here I run my simulation and store values to mat1, mat2, mat3, mat4
        #I want to store to mat1 on first iteration of j, mat2 on second etc.
        model <- lm(Y~X)
        mat[["i"]][j,1] <- model$coef[1]
        mat[["i"]][j,2] <- model$coef[2]
    }
}

对于i循环的迭代1,我希望mat [[“i”]] [j,1]与mat1的第1列相关联,迭代2与mat2等相关。这显然不起作用,因为我在这里编码我无法弄清楚如何使它工作。

我可以使用if的值来判断i的值,但是如果可能的话我想避免这种情况。

修改

感谢大家的帮助!这很有效:

reps = 1000
myMatList <- list()

for(i in 1:4){
    #Here I am going to alter my beta values for each iteration of i

    myMatList[[i]] <- matrix(NA, nrow=reps, ncol=2)

    for(j in 1:reps){
        #Here I run my simulation and store values to mat1, mat2, mat3, mat4
        #I want to store to mat1 on first iteration of j, mat2 on second etc.
        model <- lm(Y~X)
        myMatList[[i]][j,1] <- model$coef[1]
        myMatList[[i]][j,2] <- model$coef[2]
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定您的代码是否有效,但我认为这可能会有所帮助:

l <- list()
reps = 10

for(i in 1:4) {
  l[[i]] <- matrix(NA, nrow=reps, ncol=2)
}
l[[1]][1, 1] # [1] NA
l[[1]][1, ]