You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

write.table(append=T)无法追加多CSV内容,仅保留最后数据求助

问题根源:循环内重复创建文件覆盖内容

你遇到的问题根本不是append=T失效,而是每次循环Fsd的时候,你都执行了file.create(name2)——这个函数的特性是:如果目标文件已经存在,它会先删除原文件,再创建一个全新的空文件。所以哪怕你用了append=T,前面循环写入的内容都会被下一次的file.create清空,最后自然只剩最后一次循环的结果。

另外还有个小问题:你每次循环都写了一次表头"Fsd", "onSD",这会导致最终文件里出现多个表头,不符合你的预期。

修正后的代码

把文件创建和表头写入移到循环外面,只执行一次,内层循环只追加数据行:

# 先定义输出文件路径
name2 <- "duration.csv"
# 先创建文件(如果不存在的话,用file.exists判断避免重复创建)
if (!file.exists(name2)) {
  file.create(name2)
}
# 写入表头,只写一次
a <- c("Fsd", "onSD")
write.table(as.matrix(t(a)), sep = ",", file = name2, col.names = FALSE, row.names = FALSE)

# 外层循环(这里Tsd只有0.001,也可以直接写死)
for(Tsd in c(0.001)) { 
  for(Fsd in c(2,5,10,15,20,30,60)) { 
    nameoffile <- paste("summary_out_T_", Tsd, "_F_", Fsd, "_2.csv", sep="") 
    durdata <- read.csv(file = nameoffile, header=TRUE, sep=",") 
    # 提取数据并追加
    aa <- c(Fsd, durdata[16,14]) 
    write.table(as.matrix(t(aa)), sep = ",", file = name2, col.names = FALSE, row.names = FALSE, append = TRUE) 
  } 
}
额外优化建议
  • 可以用write.csv替代write.table,它默认就是逗号分隔,不用手动指定sep=",",代码更简洁:
    # 写入表头
    write.csv(data.frame(Fsd = "Fsd", onSD = "onSD"), file = name2, row.names = FALSE, col.names = FALSE)
    # 追加数据行
    write.csv(data.frame(Fsd = Fsd, onSD = durdata[16,14]), file = name2, row.names = FALSE, col.names = FALSE, append = TRUE)
    
  • 如果担心文件已经存在导致重复写入表头,可以先判断文件是否存在,只有不存在的时候才写表头。

内容的提问来源于stack exchange,提问作者Aparna S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:45:20