如何在不覆盖它的情况下附加到R中的现有文件?

时间:2014-02-10 03:29:29

标签: r

我想写一个文件,然后在循环中(在Windows机器上)多次追加它。每次我追加它之后,我想关闭连接,因为我希望文件下沉到一个Dropbox帐户,这样我就可以在其他计算机上打开它,同时代码正在运行,以检查日志文件'状态(注意这个条件使得这个问题与SO上有关sink,writeLines,write,cat等的问题有所不同)。我试过了

#set up writing
  logFile = file("log_file.txt")
  write("This is a log file for ... ", file=logFile, append=FALSE)

for(i in 1:10){
    write(i, file=logFile, append=TRUE)
}

我也试过sink(file=logFile,append=TRUE); print(i); sink();在循环中也是cat。两种选择都不起作用。该文件仅显示i = 10,即循环的最后一次迭代。我在文档中注意到以下句子。

"如果为TRUE,则将数据x附加到连接。"

以上是否意味着它不会附加到现有文件。

2 个答案:

答案 0 :(得分:8)

以下似乎适用于cat,因为它不需要文件连接:

#set up writing
logFile = "log_file.txt"
cat("This is a log file for ... ", file=logFile, append=FALSE, sep = "\n")

for(i in 1:10){
  cat(i, file=logFile, append=TRUE, sep = "\n")
}

输出看起来像是附加每个值:

This is a log file for ... 
1
2
3
4
5
6
7
8
9
10

我认为你想要的是什么。如果您使用的是Mac或使用Linux,则可以使用以下方法跟踪文件中的进度:

tail -f log_file.txt 

我不知道这对dropbox有何用处。你可以登录运行代码的计算机(例如,在mac或linux上)吗?

答案 1 :(得分:0)

在每次迭代后显式关闭文件怎么样?

#set up writing
  file.text <- "log_file.txt"
  logFile = file(file.txt)
  write("This is a log file for ... ", file=logFile, append=FALSE)
  close(logFile)
for(i in 1:10){
    logFile <- file(file.text)
    write(i, file=logFile, append=TRUE)
    close(logFile)
}