首页 > 解决方案 > 嵌套 For 循环数据存储

问题描述

我正在尝试构建一个嵌套循环,它将返回 N=1, i=1, j=1 然后 N=1,i=1,j=2 ... 直到 N=5,i=12,j=5 . 我将它保存到数据框中。有谁知道怎么做?我还想添加第四个循环,比如 k,它是 1 到 5,这样循环就会在数据帧中保存 N、i、j 和 k,它们的所有组合(1、1、1、1 到5,12,5,5)。谢谢!

P <- data.frame(PValue = numeric(), NValue=numeric())
P2 <- list()  

for (N in 1:5){
  for (i in 1:12){
    for (j in 1:5) {
    P[i, 1] <- N
    P[i, 2] <- i
    P[i, 3] <- j
    }
  }
 P2[[N]] <- P
}
final <- do.call(rbind, P2)

标签: rloopsfor-loopnested

解决方案


我真的不明白你为什么要处理loop这个问题,但是,解决方案如下,

my_vector <- vector()

for (N in 1:5){
  for (i in 1:12){
    for (j in 1:5) {
           for (k in 1:5) {

           my_vector[1] <- N
           my_vector[2] <- i
           my_vector[3] <- j
           my_vector[4] <- k

           if(N==1 & i==1 & j==1 & k==1) {

            df <- my_vector

           }else{

            df <- rbind(df,my_vector)
           }

    }
   }  
  }
 }
 tail(df)  

          [,1] [,2] [,3] [,4]
my_vector    5   12    4    5
my_vector    5   12    5    1
my_vector    5   12    5    2
my_vector    5   12    5    3
my_vector    5   12    5    4
my_vector    5   12    5    5

您可以分配rownamescolnames如果您愿意。但是,对于这个问题,有一个简单的解决方案,那就是expand.grid函数。

my_df <- expand.grid(1:5,1:12,1:5,1:5)

tail(my_df)

     Var1 Var2 Var3 Var4
1495    5   11    5    5
1496    1   12    5    5
1497    2   12    5    5
1498    3   12    5    5
1499    4   12    5    5
1500    5   12    5    5

推荐阅读