我有一个数据帧构造的循环,我想在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")
但我认为这不适合我的情况...... 任何建议
答案 0 :(得分:2)
您可以使用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
,则仅保存最后一次迭代。