【问题标题】:Nested For Loop Data Storing嵌套 For 循环数据存储
【发布时间】:2019-12-17 03:19:47
【问题描述】:

我正在尝试构建一个嵌套循环,该循环将返回 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)

【问题讨论】:

  • 最好提供样本数据、当前和预期的输出。请使用dput(head(df,n)) 提供样本数据。您的问题目前更像是一个 XY 问题。我还认为(天真地)使用 for 循环违背了使用 data.table 的目的。
  • 好吧,我把它改成了示例代码问题。谢谢@NelsonGon
  • (1,1,1,1) 最高 (1,12,5,5) 或最高 (5,12,5,5) 。 ?
  • 最多 5,12,5,5 ,我会修复它..谢谢@maydin

标签: r loops for-loop nested


【解决方案1】:

我真的不明白您为什么要为这个问题处理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

【讨论】:

  • 好的,谢谢!我将需要使用第一个并更改它,因为我将 AIC 从每个组合的线性回归中保存,所以我只上传了简化的问题。我需要嵌套循环机制.. 再次感谢!
  • 欢迎您。请注意,我使用向量进行分配,因此输出为矩阵。您可以使用as.data.frame 将其转换为数据框,也可以将值分配给空数据框而不是向量。
猜你喜欢
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多