2014-02-10 12 views
6

Ich möchte in eine Datei schreiben und dann mehrmals in einer Schleife (auf einer Windows-Maschine) anhängen. Nach jedem Anhängen möchte ich die Verbindung schließen, da Ich möchte, dass die Datei zu einem Dropbox-Konto sinkt, damit ich es auf anderen Computern öffnen kann, während der Code ausgeführt wird, um den Status der Protokolldatei zu überprüfen Bedingung macht diese Frage anders als alle Fragen, die über SO gestellt werden (Sink, WriteLines, Write, Cat, etc). Ich habe versucht,Wie an eine vorhandene Datei in R anhängen, ohne sie zu überschreiben?

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

ich auch sink(file=logFile,append=TRUE); print(i); sink() versucht haben; in der Schleife und auch cat. Keine der beiden Optionen funktioniert. Die Datei zeigt nur i = 10, die letzte Iteration der Schleife. Ich habe den folgenden Satz in der Dokumentation zum Schreiben bemerkt.

"Wenn TRUE, werden die Daten x an die Verbindung angehängt."

Bedeutet das Obige, dass es nicht an eine vorhandene Datei anhängen wird.

Antwort

7

Die folgende scheint mit Katze zu arbeiten, weil es keine Datei-Verbindung benötigt:

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

Der Ausgang wie so aussehen würde er jeden Wert nicht anhängen:

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

Was ich denke, ist was du willst. Wenn Sie auf einem Mac oder mit Linux sind, können Sie den Überblick über die Fortschritte in der Datei weiterverwenden:

tail -f log_file.txt 

Ich bin nicht sicher, wie dies jedoch mit Dropbox funktionieren würde. Können Sie sich auf dem Computer anmelden, auf dem der Code ausgeführt wird (z. B. auf Mac oder Linux)?

+0

Dieser Code scheint an die Datei anzufügen, aber er sinkt nicht mit Dropbox, was bedeuten könnte, dass die Datei offen bleibt? Vielleicht die Datei nach dem Cat-Call speziell schließen? – MHH

+0

oh es funktioniert jetzt, das ist seltsam der ursprüngliche Code war nicht, aber dieser war. Sie sahen jedoch ziemlich gleich aus. Vielleicht konnte Dropbox einfach nicht mit der langen Schleife umgehen. – MHH

+0

'für (i in 1: 1000000000) { if (i %% 10000000 == 0) cat (i, datei = logFile, append = TRUE, sep =" \ n ") } so habe ich es endlich verifiziert Code funktioniert, vielen Dank! – MHH

0

Was ist mit dem expliziten Schließen der Datei nach jeder Iteration?

#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

Dieser Code scheint nicht an die Datei angehängt zu werden, sondern überschreibt sie. – MHH

+0

@MHH wie man es vermeidet, es zu überschreiben? – munmunbb

Verwandte Themen