R保存data.frame每次迭代

Posted

技术标签:

【中文标题】R保存data.frame每次迭代【英文标题】:R save data.frame each iteration 【发布时间】:2014-07-28 21:40:08 【问题描述】:

我有一个用于构建数据框的循环,我想在每次迭代时将所有小片段写入 csv 文件。类似于rbind() 但在文件中...

我见过像这样的 sink()

示例:

sink("resultat/output.txt")
df.total<-NULL
for(i in 1:length(list2.1))
  if(i%%100==0)print(i)
  tps<-as.data.frame(list2.1[i])
  tps<-cbind(tps,as.data.frame(list2.2[i]))
  colnames(tps)<-c("slope","echange")
  tps$Run<-rep(data$run_nb[i],length(tps$slope))
  tps$coefSlope<-rep(data$coef_Slope_i[i],length(tps$slope))
  tps$coefDist<-rep(data$coef_dist_i[i],length(tps$slope))
  sink(tps)
  df.total<-rbind(df.total,tps)

sink()
write.csv(df.total,"resultat/df_total.csv")

但我认为它不适用于我的情况...... 任何建议

【问题讨论】:

考虑稍微修改一下您的问题。通过minimal example 向我们展示您的问题。您的示例太长,没有专注于您的问题,我们缺少数据。 【参考方案1】:

您可以使用 sink(将 R 输出重定向到连接)和 print

df <- data.frame(a = 0:1, b = 1:2)
sink("output.txt")
for(i in 1:10) 
    print(df[i+2, ] <- c(sum(df$a), tail(df$b, 1) + 1))
    ## Or, to save the whole data.frame each time: print(df)

sink()

另一种选择是使用cat

df <- data.frame(a = 0:1, b = 1:2)
for(i in 1:10) 
    cat(df[i+2, ] <- c(sum(df$a), tail(df$b, 1) + 1), "\n", file="output.txt" append=TRUE)

你也可以使用write.table来保存整个data.frame

df <- data.frame(a = 0:1, b = 1:2)
for(i in 1:10) 
    df[i+2, ] <- c(sum(df$a), tail(df$b, 1) + 1)
    write.table(df, file="output.txt", append=TRUE)

如果您设置append = FALSE,则只会保存最后一次迭代。

【讨论】:

谢谢write.table(df, file="output.txt", append=TRUE) 正是我所需要的

以上是关于R保存data.frame每次迭代的主要内容,如果未能解决你的问题,请参考以下文章

如何将 R data.frame 保存为没有空格的 CSV?

在 for 循环的每次迭代中保存变量并稍后加载它们

R重命名没有中间对象的对象/ data.frame

遍历数据框,其中每次迭代都有效地依赖于 R 中的前一项

如何打开多个 .RDATA 并将其中一个名称保存为 data.frame

根据开始和结束索引(保存在两个向量中)并使用条件将 data.frame 拆分为较小的 data.frame