454 Stimmen

Schreiben von Textzeilen in eine Datei in R

Wie schreibe ich in der Skriptsprache R Textzeilen, z. B. die folgenden zwei Zeilen

Hello
World

in eine Datei namens "output.txt"?

24voto

Charan Raj Punkte 441

Sie könnten dies in einer einzigen Anweisung tun

cat("hello","world",file="output.txt",sep="\n",append=TRUE)

21voto

GKi Punkte 27870

Kurze Wege zu Schreiben von Textzeilen in eine Datei in R könnte realisiert werden mit Katze o writeLines wie bereits in vielen Antworten gezeigt wurde. Einige der kürzesten Möglichkeiten könnten sein:

cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")

Falls Sie die " " nicht mögen \n " können Sie auch den folgenden Stil verwenden:

cat("Hello
World", file="output.txt")

writeLines("Hello
World", "output.txt")

Während writeLines fügt eine Zeilenumbruch am Ende der Datei, was nicht der Fall ist bei cat . Dieses Verhalten könnte durch angepasst werden:

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

Der Hauptunterschied besteht jedoch darin, dass cat verwendet R-Objekte et writeLines a Zeichenvektor als Argument. So schreibt man z.B. die Zahlen 1:10 muss für writeLines umgewandelt werden, während es in cat unverändert verwendet werden kann:

cat(1:10)
writeLines(as.character(1:10))

und cat nehmen können viele Objekte, sondern writeLines nur un Vektor:

cat("Hello", "World", sep="\n")
writeLines(c("Hello", "World"))

Das Anhängen an eine bestehende Datei ist einfacher mit cat .

cat("Hello\n", file="output.txt")
cat("World", file="output.txt", append=TRUE)

writeLines("Hello", "output.txt")
CON <- file("output.txt", "a")
writeLines("World", CON)
close(CON)

Andererseits writeLines ist schneller als cat .

bench::mark(check=FALSE,
writeLines(c("Hello", "World")),
cat("Hello", "World", sep="\n"),
writeLines(c("Hello", "World"), sep=" "),
cat(c("Hello", "World")),
cat("Hello", "World") )
#  expression                                      min   median `itr/sec` mem_a…¹
#  <bch:expr>                                 <bch:tm> <bch:tm>     <dbl> <bch:b>
#1 writeLines(c("Hello", "World"))              2.27µs   4.77µs   163878.      0B
#2 cat("Hello", "World", sep = "\n")            3.83µs   8.51µs   118708.      0B
#3 writeLines(c("Hello", "World"), sep = " ")   1.99µs   4.25µs   235944.      0B
#4 cat(c("Hello", "World"))                      4.1µs   6.84µs   141797.      0B
#5 cat("Hello", "World")                        3.46µs   7.06µs   129865.      0B

13voto

Yuriy Barvinchenko Punkte 1303

Tidyverse edition mit Rohr und write_lines() von readr

library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")

5voto

Elder Druid Punkte 496

Wie wäre es 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 et row.names = FALSE stellen Sie sicher, dass Sie die Zeilen- und Spaltennamen in der txt ausschließen und den Parameter quote = FALSE schließt die Anführungszeichen am Anfang und am Ende jeder Zeile im txt aus. Um die Daten wieder einzulesen, können Sie Folgendes verwenden text = readLines("output.txt") .

2voto

kpie Punkte 8875

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X