Dans le langage de script R, comment écrire des lignes de texte, par exemple les deux lignes suivantes
Hello
World
dans un fichier nommé "output.txt"?
Dans le langage de script R, comment écrire des lignes de texte, par exemple les deux lignes suivantes
Hello
World
dans un fichier nommé "output.txt"?
Réponses:
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
writeLines()
est environ dix fois plus rapide que la combinaison de sink()
andcat()
En fait, vous pouvez le faire avec sink()
:
sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()
donc:
file.show("outfile.txt")
# hello
# world
J'utiliserais la cat()
commande 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
Qu'en est-il d'un simple writeLines()
?
txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")
ou
txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")
"Hallo\nWorld"
est en fait un vecteur de longueur un du type caractère. Essayez simplementtxt <- "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
Vous pouvez le faire en une seule déclaration
cat("hello","world",file="output.txt",sep="\n",append=TRUE)
Je suggère:
writeLines(c("Hello","World"), "output.txt")
Elle est plus courte et plus directe que la réponse actuellement acceptée. 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:
S'il
con
s'agit d'une chaîne de caractères, la fonction appellefile
pour obtenir une connexion de fichier qui est ouverte pendant la durée de l'appel de fonction.
# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.
édition tidyverse avec pipe et write_lines()
de readr
library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")
Des méthodes courtes pour écrire des lignes de texte dans un fichier en R pourraient être réalisées avec cat ou writeLines comme déjà indiqué 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")
Alors que writeLines ajoute une nouvelle ligne à la fin du fichier ce qui n'est pas le cas pour cat . 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 des objets R et writeLines un vecteur de caractères comme argument. Ainsi, écrire par exemple les nombres 1:10 doit être casté pour writeLines alors qu'il peut être utilisé comme dans cat:
cat(1:10)
writeLines(as.character(1:10))
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 à utiliser print()
, mais si vous le faites, la sortie ne sera pas ce que vous voulez:
...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"
Basé sur la meilleure réponse :
file <- file("test.txt")
writeLines(yourObject, file)
close(file)
Notez que le yourObject
doit être dans un format de chaîne; utiliser as.character()
pour convertir si vous en avez besoin.
Mais c'est trop taper pour chaque tentative de sauvegarde. Créons un extrait dans RStudio.
Dans Options globales >> Code >> Extrait, saisissez ceci:
snippet wfile
file <- file(${1:filename})
writeLines(${2:yourObject}, file)
close(file)
Ensuite, pendant le codage, tapez wfile
et appuyez surTab .
file <- file(...)
ligne me semble suspecte. N'est-ce pas à la fois invoquer file
en fonction et assigner file
un nouveau sens? Fonctionne-t-il file()
même après l'exécution de ce morceau de code? Je n'ai pas accès à une installation R pour me tester en ce moment ...
Et un simple write.table()
?
text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)
Les paramètres col.names = FALSE
et row.names = FALSE
assurez-vous d'exclure les noms de ligne et de colonne dans le txt, et le paramètre quote = FALSE
exclut ces guillemets au début et à la fin de chaque ligne du txt. Pour lire les données, vous pouvez utiliser text = readLines("output.txt")
.
Dans les versions plus récentes de R, writeLines
préservera les retours et les espaces dans votre texte, vous n'avez donc pas besoin d'inclure \n
à la fin des lignes et vous pouvez écrire un gros morceau de texte dans un fichier. Cela fonctionnera avec l'exemple,
txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
Mais vous pouvez également utiliser cette configuration pour simplement inclure du texte avec une structure (sauts de ligne ou retraits)
txt <- "Hello
world
I can
indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)