Schrijf de tekstregels naar een bestand in R

In de R-scriptaal, hoe schrijf ik de tekst, b.v. de volgende twee regels

Hello
World

naar een bestand met de naam “Output.txt”?


Antwoord 1, Autoriteit 100%

fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)

Antwoord 2, Autoriteit 34%

eigenlijk u kan doen met sink():

sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()

Vandaar:

file.show("outfile.txt")
# hello
# world

Antwoord 3, Autoriteit 25%

Ik zou de cat()-opdracht gebruiken zoals in dit voorbeeld:

> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)

U kunt vervolgens de resultaten bekijken van met R met

> file.show("outfile.txt")
hello
world

Antwoord 4, Autoriteit 14%

Wat is ongeveer een eenvoudige writeLines()?

txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")

of

txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")

Antwoord 5, Autoriteit 4%

U kunt dat in een enkele verklaring

doen

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

Antwoord 6, autoriteit 3%

Ik stel voor:

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

Het is korter en directer dan het huidige geaccepteerde antwoord.
Het is niet nodig om:

fileConn<-file("output.txt")
# writeLines command using fileConn connection
close(fileConn)

Omdat de documentatie voor writeLines()zegt:

Als de coneen tekenreeks is, roept de functie fileaan om
een bestandsverbinding die wordt geopend voor de duur van de functie
bellen.

# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.

Antwoord 7, autoriteit 2%

tidyverse-editie met pipe en write_lines()van readr

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

Antwoord 8, autoriteit 2%

Korte manieren om regels tekst naar een bestand in R te schrijvenkunnen worden gerealiseerd met catof writeLineszoals al in veel antwoorden getoond. Enkele van de kortste mogelijkheden zijn:

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

Als je de “\n” niet leuk vindt, kun je ook de volgende stijl gebruiken:

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

Terwijl writeLineseen newlinetoevoegt aan het einde van het bestand, is dat niet het geval voor cat.
Dit gedrag kan worden aangepast door:

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

Maar het belangrijkste verschil is dat catR-objectenen writeLineseen tekenvectorals argument gebruikt. Dus uitschrijven van bijv. de nummers 1:10moeten worden gecast voor writeLines terwijl het kan worden gebruikt zoals het is in cat:

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

en catkunnen veelobjecten aannemen, maar writeLinesslechts éénvector:

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

Antwoord 9

Om de mogelijkheden compleet te maken, kun je writeLines()gebruiken met sink(), als je wilt:

> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World

Voor mij lijkt het altijd het meest intuïtief om print()te gebruiken, maar als je dat doet, zal de uitvoer niet zijn wat je wilt:

...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"

Antwoord 10

Op basis van het beste antwoord:

file <- file("test.txt")
writeLines(yourObject, file)
close(file)

Houd er rekening mee dat het yourObjecteen tekenreeksindeling moet hebben; gebruik as.character()om te converteren als dat nodig is.

Maar dit is teveel typen voor elkepoging tot opslaan. Laten we een fragment maken in RStudio.

In Algemene opties >> Code >> Fragment, typ dit:

snippet wfile
    file <- file(${1:filename})
    writeLines(${2:yourObject}, file)
    close(file)

Vervolgens, tijdens het coderen, typt u wfileen drukt u op Tab.


Antwoord 11

Hoe zit het met een eenvoudige write.table()?

text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)

De parameters col.names = FALSEen row.names = FALSEzorgen ervoor dat de rij- en kolomnamen in de txt worden uitgesloten, en de parameter quote = FALSEsluit de aanhalingstekens aan het begin en einde van elke regel in de txt uit.
Om de gegevens weer in te lezen, kunt u text = readLines("output.txt")gebruiken.


Antwoord 12

De lelijke systeemoptie

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

Antwoord 13

In nieuwere versies van R behoudt writeLinesde resultaten en spaties in uw tekst, zodat u \nniet aan het einde van regels hoeft op te nemen en u kan een groot stuk tekst naar een bestand schrijven. Dit werkt met het voorbeeld,

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

Maar u kunt deze instelling ook gebruiken om eenvoudig tekst met structuur (regeleinden of inspringingen) op te nemen

txt <- "Hello
   world
 I can 
   indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)

Other episodes