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
相关产品推荐
相关产品推荐

