在一个for循环中创建多个矩阵

时间:2017-06-19 17:20:32

标签: r for-loop matrix dataframe

我是R的新手,目前正在学习创建for循环。

我想要做的是创建6个具有类似结构的矩阵(唯一不同的是行“a”随着矩阵的数量而变化):

matrix1<- matrix(nrow=5, ncol=5, dimnames= list(c("a", "b", "c", "d", "e")

for(i in 1:5){
matrix1[1,]= 1
matrix1[2,]= round(rpois(5,1), digits=0)
matrix1[3,]= round(rpois(5,1), digits= 0)
matrix1[4,]= round(rnorm(5, 50, 25), digits= 0)
matrix1[5,]= round(rnorm(5, 50, 25), digits= 0)
}

有没有有效的方法使用for循环而不是单独执行此操作?

我还考虑创建6个填充了NA值的5 * 5Matrice,然后用之前的值填充这些值,但我不知道该怎么做。

如果能帮助我,那将是非常好的! 谢谢!

1 个答案:

答案 0 :(得分:0)

不需要for循环,你的代码在没有它的情况下运行。在R中,for循环允许你一个临时对象,在每个循环中从1到5乘以1(在你的情况下)。为了利用循环,您需要使用i。你当前的for循环实际上只会覆盖自己5次。

这是一个在列表中创建6个矩阵的循环。这里的技巧是我使用i不仅在列表中创建一个新元素(矩阵),而且还设置第一行随着它的数字矩阵而变化。

# First it is good to initialize an object that you will iterate over
lists <- vector("list", 6) # initialize to save time

for(i in 1:6){
  # create a new matrix and set all values in it to be i
  lists[[i]] <- matrix(i, nrow = 5, ncol = 5, dimnames= list(c("a", "b", "c", "d", "e")
))
  # change the remaining rows
  lists[[i]]["b",] <- round(rpois(5,1), digits = 0)
  lists[[i]]["c",] <- round(rpois(5,1), digits = 0)
  lists[[i]]["d",] <- round(rnorm(5, 50, 25), digits= 0)
  lists[[i]]["e",] <- round(rnorm(5, 50, 25), digits= 0)
}

# Properly name your lists
names(lists) <- paste0("Matrix",1:6)

# Now you can call the lists individually with
lists$Matrix1

# Or send them all to your environment with
list2env(lists, env = .GlobalEnv)

请告诉我这是否有帮助,或者如果您还有其他问题〜