2014-02-10 52 views
6

我想写入一个文件,然后在一个循环(在Windows机器上)中多次添加它。每次我追加它后,我想关闭连接,因为我想让文件沉入Dropbox帐户,以便在代码运行时在其他计算机上打开它,以检查日志文件的状态(请注意条件使得这个问题与SO上关于sink,writeLines,write,cat等问题的任何问题都不相同)。我试过如何追加到R中的现有文件而不覆盖它?

#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将附加到连接。”

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

回答

7

下似乎与猫的工作,因为它并不需要一个文件连接:

#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上)?

+0

此代码似乎附加到该文件,但它不会与Dropbox下沉,这可能意味着文件保持打开状态?也许在猫电话后专门关闭文件? – MHH

+0

哦,它现在工作,这很奇怪,最初的代码不是,但这是一个。他们看起来几乎一样。也许Dropbox无法处理长循环。 – MHH

+0

'for(i in 1:1000000000){ if(i %% 10000000 == 0)cat(i,file = logFile,append = TRUE,sep =“\ n”) }'这就是我最终验证你的代码的作品,非常感谢! – MHH

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) 
} 
+0

此代码似乎不附加到该文件,而是将其覆盖。 – MHH

+0

@MHH如何避免覆盖它? – munmunbb

相关问题