Wie schreibe ich in der Skriptsprache R Textzeilen, z. B. die folgenden zwei Zeilen?
Hello
World
in eine Datei mit dem Namen "output.txt"?
Wie schreibe ich in der Skriptsprache R Textzeilen, z. B. die folgenden zwei Zeilen?
Hello
World
in eine Datei mit dem Namen "output.txt"?
Antworten:
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
writeLines()
ist ungefähr zehnmal schneller als die Kombination von sink()
undcat()
Eigentlich kann man das machen mit sink()
:
sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()
daher:
file.show("outfile.txt")
# hello
# world
Ich würde den cat()
Befehl wie in diesem Beispiel verwenden:
> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)
Sie können dann die Ergebnisse von mit R mit anzeigen
> file.show("outfile.txt")
hello
world
Was ist mit einem einfachen writeLines()
?
txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")
oder
txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")
"Hallo\nWorld"
ein Vektor der Länge eins des Zeichentyps. Versuchen txt <- "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
cat("hello","world",file="output.txt",sep="\n",append=TRUE)
Ich schlage vor:
writeLines(c("Hello","World"), "output.txt")
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
con
eine Zeichenfolge ist, ruft die Funktionfile
auf, 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.
tidyverse ausgabe mit write_lines()
pfeife und von readr
library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")
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:
cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")
Falls Ihnen das "\ n" nicht gefällt, können Sie auch den folgenden Stil verwenden:
cat("Hello
World", file="output.txt")
writeLines("Hello
World", "output.txt")
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:
cat(1:10)
writeLines(as.character(1:10))
Um die Möglichkeiten abzurunden, können Sie writeLines()
mit verwenden sink()
, wenn Sie möchten:
> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World
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:
...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"
Basierend auf der besten Antwort :
file <- file("test.txt")
writeLines(yourObject, file)
close(file)
Beachten Sie, dass das yourObject
Zeichenfolgenformat vorliegen muss. Verwenden as.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:
snippet wfile
file <- file(${1:filename})
writeLines(${2:yourObject}, file)
close(file)
Dann bei der Kodierung, Typ wfile
und drückenTab .
file <- file(...)
Leitung sieht für mich verdächtig aus. Ruft es nicht gleichzeitig file
als Funktion auf und weist ihm file
eine 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 ...
Was ist mit einem einfachen write.table()
?
text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)
Die Parameter col.names = FALSE
und row.names = FALSE
stellen Sie sicher, dass die Zeilen- und Spaltennamen im txt ausgeschlossen sind, und der Parameter quote = FALSE
schließ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 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:
txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
Sie können dieses Setup aber auch verwenden, um einfach Text mit Struktur einzuschließen (Zeilenumbrüche oder Einrückungen).
txt <- "Hello
world
I can
indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)