在for循环的每次迭代中创建新的df

时间:2017-11-18 16:48:01

标签: r function for-loop iterator

我有一个函数tot_prof(number, df1, number, df2),其中输出本身是另一个df。

我正在尝试遍历df3以获取string函数的tot_prof值。

每次迭代都应将tot_prof的结果存储为新的df(或者所有结果都可以合并)。

我该怎么做?

我试图像这样创建另一个函数:

iterator <- function(df, cluster, prod_dat, q_dat) {

  l <- list(length(df))

  iter <- 1

  for (i in l){
    thisl <- i

    for (n in 1:nrow(df)) {
      prod <- n

      iter_out <- tot_prof(cluster, prod_dat, prod, q_dat)

      l[[iter]] <- data.frame(iter_out)
    }
    iter <- iter + 1
  }

  l <- as.data.frame(l)

  return(l)
}

它应该为10个不同的prod值返回310个观察值 - 相反,它会返回相同prod的61个观测值。

我很困惑。请帮忙。

1 个答案:

答案 0 :(得分:1)

很抱歉没有发表评论(我不被允许),但也许是一个解决方案:

对于每个prod,您要在最后一个上保存新数据框。解决方案是按列(prod)或行(cbind())组合所有rbind()数据框。最后将其保存到列表l

  iterator <- function(df, cluster, prod_dat, q_dat) {

    l <- list(length(df))

    for (i in l){
      iter <- i

      for (n in 1:nrow(df)) {
        prod <- n

        df <- tot_prof(cluster, prod_dat, prod, q_dat)

        if(prod == 1) {
          iter_out <- df
        }else {
          iter_out <- cbind(iter_out, df) # or rbind depending what you want 

        }          
      }
      l[[iter]] <- iter_out

      iter <- iter + 1
    }

    return(l)
  }