web-dev-qa-db-fra.com

Écrire des lignes de texte dans un fichier en R

Dans le langage de script R, comment puis-je écrire des lignes de texte, par exemple les deux lignes suivantes

Hello
World

dans un fichier nommé "output.txt"?

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

En fait vous pouvez le faire avec sink():

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

par conséquent:

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

J'utiliserais la commande cat() comme dans cet exemple:

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

Vous pouvez ensuite afficher les résultats de avec R avec

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

Qu'en est-il d'une simple writeLines()?

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

ou

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

Vous pouvez le faire en une seule déclaration

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

Je suggère:

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

Il est plus court et plus direct que la réponse acceptée actuellement. Il n'est pas nécessaire de faire:

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

Parce que la documentation de writeLines() dit:

Si con est une chaîne de caractères, la fonction appelle file pour obtenir une connexion de fichier qui est ouverte pendant la durée de l'appel de la fonction.

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

Basé sur la meilleure réponse :

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

Notez que la yourObject doit être au format chaîne; utilisez as.character() pour convertir si vous en avez besoin.

Mais c’est trop pour taper pour chaque tentative de sauvegarde . Créons un extrait de code dans RStudio.

Dans Options globales >> Code >> Extrait, tapez ceci:

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

Puis, lors du codage, tapez wfile et appuyez sur Tab.

2
Luis Martins

Pour compléter les possibilités, vous pouvez utiliser writeLines() avec sink(), si vous le souhaitez:

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

Pour moi, il semble toujours plus intuitif d'utiliser print(), mais si vous faites cela, le résultat ne sera pas ce que vous voulez:

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

Des manières courtes pour écrire des lignes de texte dans un fichier en R pourraient être réalisées avec cat ou writeLines = comme déjà montré dans de nombreuses réponses. Certaines des possibilités les plus courtes pourraient être:

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

Si vous n'aimez pas le "\ n", vous pouvez également utiliser le style suivant:

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

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

While writeLines ajoute une nouvelle ligne à la fin du fichier. le cas pour chat . Ce comportement pourrait être ajusté par:

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

Mais la principale différence est que cat utilise R objets et writeLines a vecteur de caractères en tant qu'argument. Donc écrire par exemple les nombres 1:10 doivent être transtypés pour writeLines alors qu'il peut être utilisé tel quel dans cat:

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

L'option système laide

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
1
kpie

édition tidyverse avec pipe et write_lines() de readr

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