【问题标题】:How to append to an existing file in R without overwriting it?如何附加到 R 中的现有文件而不覆盖它?
【发布时间】:2014-03-07 06:41:12
【问题描述】:

我想写入一个文件,然后在一个循环中多次附加它(在 Windows 机器上)。每次附加后,我都想关闭连接,因为 我希望文件接收到保管箱帐户,以便在代码运行时在其他计算机上打开它,以检查日志文件的状态(请注意,这种情况使这个问题与 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,即循环的最后一次迭代。我注意到 write 文档中的以下句子。

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

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

【问题讨论】:

    标签: r


    【解决方案1】:

    以下似乎适用于 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 上)吗?

    【讨论】:

    • 此代码似乎附加到文件中,但它没有与 dropbox 一起下沉,这可能意味着文件保持打开状态?也许在 cat 调用后专门关闭文件?
    • 哦,它现在可以工作了,奇怪的是最初的代码不是,但这个是。不过,它们看起来几乎一样。也许 Dropbox 无法处理长循环。
    • for(i in 1:1000000000){ if(i %% 10000000 ==0) cat(i, file=logFile, append=TRUE, sep = "\n") } 这就是我最终验证您的代码有效的方式,非常感谢!
    【解决方案2】:

    如何在每次迭代后显式关闭文件?

    #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)
    }
    

    【讨论】:

    • 这段代码似乎没有附加到文件中,而是覆盖了它。
    • @MHH 如何避免被覆盖?
    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多