Markieren - was ist, wenn ich mehrere Threads habe, von denen ich alle Zeilen zur gleichen Datei hinzufügen möchte? (Das Problem ist, dass Sie nicht mehr als eine Verbindung zu einer Datei haben können, wenn ich mich nicht irre) Danke.
Tal Galili
8
@Tal, das ist eine ausgezeichnete Frage, du solltest sie als neue, separate Frage posten, damit sie etwas Aufmerksamkeit erhält. Es gibt hier viel mehr sachkundige R-Programmierer als ich!
Mark
8
Beachten Sie, dass hierfür die Datei "output.txt" bereits vorhanden sein muss. Wenn dies nicht der Fall ist, muss es zuerst erstellt werden, z. B. mit 'file.create ("output.txt")'.
Jhin
20
@jhin Ich bin mir nicht sicher, ob das stimmt. Mit RStudio 0.98 und R Version 3.1.0 wird die Datei automatisch erstellt, wenn sie nicht vorhanden ist
JHowIX
4
Die Option von writeLines()ist ungefähr zehnmal schneller als die Kombination von sink()undcat()
sink () funktioniert nicht bei Databricks, sei vorsichtig. Sie können all diese Elemente in eine Funktion einfügen und diese Funktion wie capture.output (Funktionsaufruf, Dateiname)
aufrufen
109
Ich würde den cat()Befehl wie in diesem Beispiel verwenden:
schön zu zeigen, dass die Eingabe kein Linienvektor sein muss
Tim
1
@tim Ist eigentlich "Hallo\nWorld"ein Vektor der Länge eins des Zeichentyps. Versuchen txt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
Sie es
Das funktioniert bei mir nur als writeLines(txt, con="outfile.txt").
Palec
Nein, sollte funktionieren, ohne Argumente zu benennen, solange Sie einen gültigen Dateinamen als zweites Argument angeben.
Es ist kürzer und direkter als die aktuell akzeptierte Antwort. Es ist nicht notwendig zu tun:
fileConn<-file("output.txt")# writeLines command using fileConn connection
close(fileConn)
Weil die Dokumentation für writeLines()sagt:
Wenn das coneine Zeichenfolge ist, ruft die Funktion fileauf, um eine Dateiverbindung zu erhalten, die für die Dauer des Funktionsaufrufs geöffnet wird.
# default settings for writeLines(): sep = "\n", useBytes = FALSE# so: sep = "" would join all together e.g.
Kurze Möglichkeiten zum Schreiben von Textzeilen in eine Datei in R können mit cat oder writeLines realisiert werden, wie bereits in vielen Antworten gezeigt. Einige der kürzesten Möglichkeiten könnten sein:
Während writeLines am Ende der Datei eine neue Zeile hinzufügt, ist dies bei cat nicht der Fall . Dieses Verhalten kann angepasst werden durch:
writeLines("Hello\nWorld","output.txt", sep="")#No newline at end of file
cat("Hello\nWorld\n", file="output.txt")#Newline at end of file
cat("Hello\nWorld", file="output.txt", sep="\n")#Newline at end of file
Aber wesentlicher Unterschied besteht darin , dass Katze Verwendungen R Objekte und writelines ein Zeichen Vektor als Argument. Wenn Sie also z. B. die Zahlen 1:10 ausschreiben, müssen Sie diese für writeLines verwenden, während Sie sie wie in cat verwenden können:
Die file <- file(...)Leitung sieht für mich verdächtig aus. Ruft es nicht gleichzeitig fileals Funktion auf und weist ihm fileeine neue Bedeutung zu? Funktioniert es file()auch, nachdem dieser Code ausgeführt wurde? Ich habe momentan keinen Zugriff auf eine R-Installation, um mich selbst zu testen ...
Palec
es funktionierte auf meinem Setup @Palec Sie können die Datei in youFile ändern, wenn Sie ein Problem mit reservierten Wörtern haben
Luis Martins
1
Die hässliche Systemoption
ptf <-function(txtToPrint,outFile){system(paste(paste(paste("echo '",cat(txtToPrint),sep ="",collapse =NULL),"'>",sep ="",collapse =NULL),outFile))}#Prints txtToPrint to outFile in cwd. #!/bin/bash echo txtToPrint > outFile
Die Parameter col.names = FALSEund row.names = FALSEstellen Sie sicher, dass die Zeilen- und Spaltennamen im txt ausgeschlossen sind, und der Parameter quote = FALSEschließt diese Anführungszeichen am Anfang und Ende jeder Zeile im txt aus. Um die Daten wieder einzulesen, können Sie verwenden text = readLines("output.txt").
In neueren Versionen von R writeLinesbleiben Rückgaben und Leerzeichen in Ihrem Text erhalten, sodass Sie nicht \nam Zeilenende einfügen müssen und einen großen Textblock in eine Datei schreiben können. Dies funktioniert mit dem Beispiel:
writeLines()
ist ungefähr zehnmal schneller als die Kombination vonsink()
undcat()
Eigentlich kann man das machen mit
sink()
:daher:
quelle
Ich würde den
cat()
Befehl wie in diesem Beispiel verwenden:Sie können dann die Ergebnisse von mit R mit anzeigen
quelle
Was ist mit einem einfachen
writeLines()
?oder
quelle
"Hallo\nWorld"
ein Vektor der Länge eins des Zeichentyps. Versuchentxt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
writeLines(txt, con="outfile.txt")
.> coefficients<-summary(model) > writeLines(coefficients, "coefficients") Error in writeLines(coefficients, "coefficients") : invalid 'text' argument
Sie können dies in einer einzigen Anweisung tun
quelle
Ich schlage vor:
Es ist kürzer und direkter als die aktuell akzeptierte Antwort. Es ist nicht notwendig zu tun:
Weil die Dokumentation für
writeLines()
sagt:quelle
tidyverse ausgabe mit
write_lines()
pfeife und von readrquelle
Kurze Möglichkeiten zum Schreiben von Textzeilen in eine Datei in R können mit cat oder writeLines realisiert werden, wie bereits in vielen Antworten gezeigt. Einige der kürzesten Möglichkeiten könnten sein:
Falls Ihnen das "\ n" nicht gefällt, können Sie auch den folgenden Stil verwenden:
Während writeLines am Ende der Datei eine neue Zeile hinzufügt, ist dies bei cat nicht der Fall . Dieses Verhalten kann angepasst werden durch:
Aber wesentlicher Unterschied besteht darin , dass Katze Verwendungen R Objekte und writelines ein Zeichen Vektor als Argument. Wenn Sie also z. B. die Zahlen 1:10 ausschreiben, müssen Sie diese für writeLines verwenden, während Sie sie wie in cat verwenden können:
quelle
Um die Möglichkeiten abzurunden, können Sie
writeLines()
mit verwendensink()
, wenn Sie möchten:Für mich scheint es immer am intuitivsten zu sein
print()
, aber wenn Sie das tun, wird die Ausgabe nicht das sein, was Sie wollen:quelle
Basierend auf der besten Antwort :
Beachten Sie, dass das
yourObject
Zeichenfolgenformat vorliegen muss. Verwendenas.character()
Sie diese Option, um bei Bedarf zu konvertieren.Dies ist jedoch zu viel Eingabe für jeden Speicherversuch. Lassen Sie uns ein Snippet in RStudio erstellen.
Geben Sie unter Globale Optionen >> Code >> Snippet Folgendes ein:
Dann bei der Kodierung, Typ
wfile
und drückenTab .quelle
file <- file(...)
Leitung sieht für mich verdächtig aus. Ruft es nicht gleichzeitigfile
als Funktion auf und weist ihmfile
eine neue Bedeutung zu? Funktioniert esfile()
auch, nachdem dieser Code ausgeführt wurde? Ich habe momentan keinen Zugriff auf eine R-Installation, um mich selbst zu testen ...Die hässliche Systemoption
quelle
Was ist mit einem einfachen
write.table()
?Die Parameter
col.names = FALSE
undrow.names = FALSE
stellen Sie sicher, dass die Zeilen- und Spaltennamen im txt ausgeschlossen sind, und der Parameterquote = FALSE
schließt diese Anführungszeichen am Anfang und Ende jeder Zeile im txt aus. Um die Daten wieder einzulesen, können Sie verwendentext = readLines("output.txt")
.quelle
In neueren Versionen von R
writeLines
bleiben Rückgaben und Leerzeichen in Ihrem Text erhalten, sodass Sie nicht\n
am Zeilenende einfügen müssen und einen großen Textblock in eine Datei schreiben können. Dies funktioniert mit dem Beispiel:Sie können dieses Setup aber auch verwenden, um einfach Text mit Struktur einzuschließen (Zeilenumbrüche oder Einrückungen).
quelle