我是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,然后用之前的值填充这些值,但我不知道该怎么做。
如果能帮助我,那将是非常好的! 谢谢!
答案 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)
请告诉我这是否有帮助,或者如果您还有其他问题〜