Importar archivo de texto como cadena de un solo caracter

¿Cómo se importa un archivo de texto plano 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 hacer esto.

Por ejemplo, supongamos que tengo un archivo foo.txt con algo que quiero mandar.

Lo intenté con:

 scan("foo.txt", what="character", sep=NULL) 

pero esto todavía devolvió un vector. Lo conseguí 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.

Aquí hay una variante de la solución de @JoshuaUlrich que usa el tamaño correcto en lugar de un tamaño rígido:

 fileName < - 'foo.txt' readChar(fileName, file.info(fileName)$size) 

Tenga en cuenta que readChar asigna espacio para la cantidad de bytes que especifique, por lo que readChar(fileName, .Machine$integer.max) no funciona bien ...

En caso de que alguien siga viendo esta pregunta 3 años después, el paquete readr de Hadley Wickham tiene una práctica función read_file() que hará esto por usted.

 install.packages("readr") # you only need to do this one time on your system library(readr) mystring < - read_file("path/to/myfile.txt") 

Yo usaría lo siguiente. Debería funcionar bien y no parece feo, al menos para mí:

 singleString < - paste(readLines("foo.txt"), collapse=" ") 

Qué tal si:

 string < - readChar("foo.txt",nchars=1e6) 

El paquete readr tiene una función para hacer todo por ti.

 install.packages("readr") # you only need to do this one time on your system library(readr) mystring < - read_file("path/to/myfile.txt") 

Esto reemplaza la versión en el paquete stringr.

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:

 read.text = function(pathname) { return (paste(readLines(pathname), collapse="\n")) } 

y utilícelo así: txt = read.text('path/to/my/file.txt') . No pude replicar el hallazgo de writeLines(txt) y writeLines(txt) mostró el contenido de file.txt . Además, después de write(txt, '/tmp/out') el comando diff /tmp/out path/to/my/file.txt no informó diferencias.

readChar no tiene mucha flexibilidad, así que combiné tus soluciones (líneas de lectura y pegado).

También he agregado un espacio entre cada línea:

 con < - file("/Users/YourtextFile.txt", "r", blocking = FALSE) singleString <- readLines(con) # empty singleString <- paste(singleString, sep = " ", collapse = " ") close(con)