Wie importiere ich eine Nur-Text-Datei als einzelne Zeichenfolge in R? Ich denke, dass dies wahrscheinlich eine sehr einfache Antwort haben wird, aber als ich dies heute versuchte, stellte ich fest, dass ich keine Funktion dafür finden konnte.
Angenommen, ich habe eine Datei foo.txt
mit etwas, das ich textminieren möchte.
Ich habe es versucht mit:
scan("foo.txt", what="character", sep=NULL)
Dies ergab jedoch immer noch einen Vektor. Ich habe es etwas zum Laufen gebracht mit:
paste(scan("foo.txt", what="character", sep=" "),collapse=" ")
aber das ist eine ziemlich hässliche Lösung, die wahrscheinlich auch instabil ist.
readr::read_file
löst dieses Problem jetzt gut.Antworten:
Hier ist eine Variante der Lösung von @JoshuaUlrich, die anstelle einer fest codierten Größe die richtige Größe verwendet:
Beachten Sie, dass readChar Speicherplatz für die von Ihnen angegebene Anzahl von Bytes reserviert und daher
readChar(fileName, .Machine$integer.max)
nicht gut funktioniert ...quelle
Für den Fall, dass sich 3 Jahre später noch jemand mit dieser Frage befasst, verfügt das Readr-Paket von Hadley Wickham über eine praktische
read_file()
Funktion, die dies für Sie erledigt .quelle
readr
. Ich habe die Antwort entsprechend aktualisiert - ich hoffe, Sharon hat nichts dagegen.could not find function "pase"
diesen Code erhaltenIch würde folgendes verwenden. Es sollte gut funktionieren und scheint zumindest für mich nicht hässlich zu sein:
quelle
collapse="\n"
, die Tatsache zu wiederholen, dass dies separate Zeilen in der Originaldatei sind. Mit dieser Änderung dieser Lösung wird ebenso gut für komprimierte und unkomprimierte Dateien arbeiten.blocking=TRUE
standardmäßig soreadLines()
, dass die vollständige Datei nur mit einer Warnung über das fehlende EOL-Zeichen zurückgegeben wird. Der Kommentar von @ gvrocha ist jedoch zu beachten: Verstehen Sie Ihren Verbindungstyp! ReadLines Hilfe sagtIf 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.**
Wie wäre es mit:
quelle
Das readr-Paket hat die Funktion, alles für Sie zu erledigen.
Dies ersetzt die Version im Paket stringr.
quelle
Schade, dass Sharons Lösung nicht mehr verwendet werden kann. Ich habe Josh O'Briens Lösung mit Asieiras Modifikation zu meiner .Rprofile-Datei hinzugefügt:
und benutze es so :
txt = read.text('path/to/my/file.txt')
. Ich konnte Bumpkins (28. Oktober 14) Befund nicht wiederholen undwriteLines(txt)
zeigte den Inhalt vonfile.txt
. Auch nachwrite(txt, '/tmp/out')
dem Befehldiff /tmp/out path/to/my/file.txt
wurden keine Unterschiede gemeldet.quelle
readChar hat nicht viel Flexibilität, deshalb habe ich Ihre Lösungen (readLines und Einfügen) kombiniert.
Ich habe auch ein Leerzeichen zwischen jeder Zeile eingefügt:
quelle
Es scheint, dass Ihre Lösung nicht viel hässlich ist. Sie können Funktionen verwenden und sie auf diese Weise professionell gestalten
quelle