Mark - que se passe-t-il si j'ai plusieurs threads dont je voudrais ajouter des lignes au même fichier? (Le problème est que vous ne pouvez pas avoir plus d'une connexion à un fichier, si je ne me trompe pas) Merci.
Tal Galili
8
@Tal, c'est une excellente question, vous devez la poster en tant que nouvelle question distincte afin qu'elle retienne l'attention. Il y a beaucoup plus de programmeurs R compétents ici que moi!
Mark
8
Notez que cela nécessite que le fichier "output.txt" existe déjà. Si ce n'est pas le cas, il doit d'abord être créé, par exemple en utilisant 'file.create ("output.txt")'.
jhin
20
@jhin Je ne sais pas si c'est vrai. En utilisant RStudio 0.98 et R version 3.1.0, le fichier est créé automatiquement s'il n'existe pas
JHowIX
4
L'option de writeLines()est environ dix fois plus rapide que la combinaison de sink()andcat()
Sink () ne fonctionne pas sur Databricks, soyez prudent. Vous pouvez utiliser mettre tout cela dans une fonction et appeler cette fonction comme capture.output (appel funciton, nom de fichier)
abdkumar
109
J'utiliserais la cat()commande comme dans cet exemple:
agréable de montrer que l'entrée n'a pas à être un vecteur de lignes
tim
1
@tim "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)
zero323
Cela ne fonctionne que pour moi writeLines(txt, con="outfile.txt").
Palec
Non, devrait fonctionner sans nommer d'arguments tant que vous donnez un nom de fichier valide comme deuxième argument.
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 cons'agit d'une chaîne de caractères, la fonction appelle filepour 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.
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:
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:
La file <- file(...)ligne me semble suspecte. N'est-ce pas à la fois invoquer fileen fonction et assigner fileun 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 ...
Palec
cela a fonctionné sur ma configuration @Palec Vous pouvez changer le fichier en youFile si vous avez un problème avec les mots réservés
Luis Martins
1
L'option système laid
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
Les paramètres col.names = FALSEet row.names = FALSEassurez-vous d'exclure les noms de ligne et de colonne dans le txt, et le paramètre quote = FALSEexclut 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, writeLinespré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,
writeLines()
est environ dix fois plus rapide que la combinaison desink()
andcat()
En fait, vous pouvez le faire avec
sink()
:donc:
la source
J'utiliserais la
cat()
commande comme dans cet exemple:Vous pouvez ensuite afficher les résultats de avec R avec
la source
Qu'en est-il d'un simple
writeLines()
?ou
la source
"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
la source
Je suggère:
Elle est plus courte et plus directe que la réponse actuellement acceptée. Il n'est pas nécessaire de faire:
Parce que la documentation de
writeLines()
dit:la source
édition tidyverse avec pipe et
write_lines()
de readrla source
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:
Si vous n'aimez pas le "\ n", vous pouvez également utiliser le style suivant:
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:
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:
la source
Pour compléter les possibilités, vous pouvez utiliser
writeLines()
avecsink()
, si vous le souhaitez:Pour moi, il semble toujours plus intuitif à utiliser
print()
, mais si vous le faites, la sortie ne sera pas ce que vous voulez:la source
Basé sur la meilleure réponse :
Notez que le
yourObject
doit être dans un format de chaîne; utiliseras.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:
Ensuite, pendant le codage, tapez
wfile
et appuyez surTab .la source
file <- file(...)
ligne me semble suspecte. N'est-ce pas à la fois invoquerfile
en fonction et assignerfile
un nouveau sens? Fonctionne-t-ilfile()
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 ...L'option système laid
la source
Et un simple
write.table()
?Les paramètres
col.names = FALSE
etrow.names = FALSE
assurez-vous d'exclure les noms de ligne et de colonne dans le txt, et le paramètrequote = FALSE
exclut ces guillemets au début et à la fin de chaque ligne du txt. Pour lire les données, vous pouvez utilisertext = readLines("output.txt")
.la source
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,Mais vous pouvez également utiliser cette configuration pour simplement inclure du texte avec une structure (sauts de ligne ou retraits)
la source