如何从 R 中的函数 return 迭代更新数据框?

How to return iteratively updated data frame from function in R?

假设我想在 while 循环内执行迭代计算并维护 运行 记录,然后 return 数据集如下(使用适当的范围):

df <- data.frame(iter=integer(), x=integer())
x = 0

df_func <- function(df, x, num_iter){
  i = 0
  while(i < num_iter){
    i = i + 1
    x = x + 10
    new_df = data.frame(iter=i, x=x)
    df <<- rbind(df, new_df)
  }
  return(df)
}

df_func(df, x, 10)

我希望 df 包含 x=1 到 10 值的十行,但我只得到最后一行:

> df
  iter   x
1   10 100

我错过了什么?

对 MrFlick 的评论进行一些扩展:

这里的问题是 R 中的函数执行按值传递:df inside df_funcdf 的副本(具有空列 iterxdata.frame)传递给函数。由于 <<- 的使用,此副本从未被修改。相反,在 while

的每次迭代中

df <<- rbind(df, new_df),

相当于

df <<- rbind(data.frame(iter=integer(), x=integer()), new_df),

在全局环境中修改df,导致

> df
  iter   x
1   10 100

10 次迭代后。