Comment importer un fichier texte brut en tant que chaîne de caractères unique dans R? Je pense que cela aura probablement une réponse très simple, mais quand j'ai essayé cela aujourd'hui, j'ai trouvé que je ne pouvais pas trouver de fonction pour le faire.
Par exemple, supposons que j'ai un fichier foo.txt
avec quelque chose que je veux texturer.
Je l'ai essayé avec:
scan("foo.txt", what="character", sep=NULL)
mais cela a quand même renvoyé un vecteur. Je l'ai fait travailler un peu avec:
paste(scan("foo.txt", what="character", sep=" "),collapse=" ")
mais c'est une solution assez laide qui est probablement aussi instable.
readr::read_file
résout bien ce problème maintenant.Réponses:
Voici une variante de la solution de @JoshuaUlrich qui utilise la taille correcte au lieu d'une taille codée en dur:
Notez que readChar alloue de l'espace pour le nombre d'octets que vous spécifiez, donc
readChar(fileName, .Machine$integer.max)
ne fonctionne pas bien ...la source
Au cas où quelqu'un se pencherait encore sur cette question 3 ans plus tard, le paquet readr de Hadley Wickham a une
read_file()
fonction pratique qui le fera pour vous.la source
readr
. J'ai mis à jour la réponse en conséquence - j'espère que cela ne dérange pas Sharon.could not find function "pase"
ce codeJ'utiliserais ce qui suit. Cela devrait très bien fonctionner, et ne semble pas laid, du moins pour moi:
la source
collapse="\n"
à reproduire le fait qu'il s'agit de lignes distinctes dans le fichier d'origine. Avec ce changement, cette solution va travailler pour les fichiers compressés et non compressés tout aussi bien.blocking=TRUE
par défaut doncreadLines()
retourneront le fichier complet juste avec un avertissement sur le caractère EOL manquant. Cependant, le commentaire de @ gvrocha mérite d'être entendu: comprenez votre type de connexion! ? L'aide de readLines ditIf the final line is incomplete (no final EOL marker) the behaviour depends on whether the connection is blocking or not. For a non-blocking text-mode connection the incomplete line is pushed back, silently. **For all other connections the line will be accepted, with a warning.**
Que diriez-vous:
la source
Le paquet readr a une fonction pour tout faire pour vous.
Cela remplace la version dans le package stringr.
la source
Dommage que la solution de Sharon ne puisse plus être utilisée. J'ai ajouté la solution de Josh O'Brien avec la modification de asieira à mon fichier .Rprofile:
et l' utiliser comme ceci:
txt = read.text('path/to/my/file.txt')
. Je n'ai pas pu reproduire les conclusions de Bumpkin (28 oct. 14) et j'aiwriteLines(txt)
montré le contenu defile.txt
. De plus, aprèswrite(txt, '/tmp/out')
la commande,diff /tmp/out path/to/my/file.txt
aucune différence n'a été signalée.la source
readChar n'a pas beaucoup de flexibilité, j'ai donc combiné vos solutions (readLines et paste).
J'ai également ajouté un espace entre chaque ligne:
la source
Il semble que votre solution ne soit pas très moche. Vous pouvez utiliser des fonctions et le rendre professionnel comme ces façons
la source