¿Cómo se importa un archivo de texto sin formato como cadena de un solo carácter en R? Creo que esto probablemente tendrá una respuesta muy simple, pero cuando probé esto hoy descubrí que no podía encontrar una función para hacerlo.
Por ejemplo, supongamos que tengo un archivo foo.txt
con algo que quiero minar.
Lo probé con:
scan("foo.txt", what="character", sep=NULL)
pero esto todavía devolvió un vector. Lo tengo trabajando un poco con:
paste(scan("foo.txt", what="character", sep=" "),collapse=" ")
pero esa es una solución bastante fea que probablemente también sea inestable.
readr::read_file
resuelve este problema muy bien ahora.Respuestas:
Aquí hay una variante de la solución de @JoshuaUlrich que usa el tamaño correcto en lugar de un tamaño codificado:
Tenga en cuenta que readChar asigna espacio para la cantidad de bytes que especifique, por lo
readChar(fileName, .Machine$integer.max)
que no funciona bien ...fuente
En caso de que alguien todavía esté analizando esta pregunta 3 años después, el paquete de lectura de Hadley Wickham tiene una
read_file()
función útil que lo hará por usted.fuente
readr
. He actualizado la respuesta en consecuencia, espero que a Sharon no le importe.could not find function "pase"
en este códigoYo usaría lo siguiente. Debería funcionar bien, y no me parece feo, al menos para mí:
fuente
collapse="\n"
replicar el hecho de que estas son líneas separadas en el archivo original. Con este cambio, esta solución va a trabajar para los archivos comprimidos y sin comprimir igualmente bien.blocking=TRUE
por defecto, por loreadLines()
que devolverá el archivo completo solo con una advertencia sobre el carácter EOL faltante. Sin embargo, vale la pena escuchar el comentario de @gvrocha: ¡comprenda su tipo de conexión! ? ayuda de readLines diceIf 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.**
Qué tal si:
fuente
El paquete de lectura tiene una función para hacer todo por usted.
Esto reemplaza la versión en el paquete stringr.
fuente
Lástima que la solución de Sharon ya no se pueda usar. He agregado la solución de Josh O'Brien con la modificación de asieira a mi archivo .Rprofile:
y utilizar de esta manera:
txt = read.text('path/to/my/file.txt')
. No pude replicar el hallazgo de bumpkin (28 oct. 14), ywriteLines(txt)
mostré el contenido defile.txt
. Además, después de quewrite(txt, '/tmp/out')
el comandodiff /tmp/out path/to/my/file.txt
no informó diferencias.fuente
readChar no tiene mucha flexibilidad, por lo que combiné sus soluciones (readLines y paste).
También he agregado un espacio entre cada línea:
fuente
Parece que tu solución no es muy fea. Puede usar funciones y hacerlo profesional de esta manera
fuente