Importar arquivo de texto como string de caractere único

Como você importa um arquivo de texto simples como uma única cadeia de caracteres em R? Eu acho que isso provavelmente terá uma resposta muito simples, mas quando eu tentei isso hoje, descobri que não conseguia encontrar uma function para fazer isso.

Por exemplo, suponha que eu tenho um arquivo foo.txt com algo que eu quero textmine.

Eu tentei com:

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

mas isso ainda retornou um vetor. Eu consegui trabalhar um pouco com:

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

mas essa é uma solução bastante feia e provavelmente instável também.

Aqui está uma variante da solução do @JoshuaUlrich que usa o tamanho correto em vez de um tamanho codificado:

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

Observe que readChar aloca espaço para o número de bytes que você especifica, portanto, readChar(fileName, .Machine$integer.max) não funciona bem ...

Caso alguém ainda esteja olhando para essa questão 3 anos depois, o pacote readr de Hadley Wickham tem uma útil function read_file() que fará isso por você.

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

Eu usaria o seguinte. Deve funcionar muito bem e não parece feio, pelo menos para mim:

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

E se:

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

O pacote readr tem uma function para fazer tudo por você.

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

Isso substitui a versão no pacote stringr.

Pena que a solução de Sharon não pode mais ser usada. Eu adicionei a solução de Josh O’Brien com a modificação do asieira no meu arquivo .Rprofile:

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

e usá-lo assim: txt = read.text('path/to/my/file.txt') . Não consegui replicar a descoberta de bumpkin (28 de writeLines(txt) 14) e writeLines(txt) mostrou o conteúdo de file.txt . Além disso, depois de write(txt, '/tmp/out') o comando diff /tmp/out path/to/my/file.txt não relatou diferenças.

readChar não tem muita flexibilidade, então eu combinei suas soluções (leiaLinhas e cole).

Eu também adicionei um espaço entre cada linha:

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