Импортировать текстовый файл как односимвольную строку - PullRequest
178 голосов
/ 30 января 2012

Как вы импортируете простой текстовый файл в виде односимвольной строки в R? Я думаю, что это, вероятно, будет очень простой ответ, но когда я попробовал это сегодня, я обнаружил, что не могу найти функцию для этого.

Например, предположим, у меня есть файл foo.txt с чем-то, что я хочу textmine.

Я попробовал это с:

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

но это все равно вернуло вектор. Я получил это работает с:

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

но это довольно уродливое решение, которое, вероятно, тоже нестабильно.

Ответы [ 7 ]

194 голосов
/ 30 января 2012

Вот вариант решения от @JoshuaUlrich, в котором вместо жестко заданного размера используется правильный размер:

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

Обратите внимание, что readChar выделяет пространство для указанного количества байтов, поэтому readChar(fileName, .Machine$integer.max) не работает хорошо ...

121 голосов
/ 11 мая 2015

На случай, если кто-то еще будет рассматривать этот вопрос 3 года спустя, пакет readr Хэдли Уикхэма имеет удобную функцию read_file(), которая сделает это за вас.

install.packages("readr") # you only need to do this one time on your system
library(readr)
mystring <- read_file("path/to/myfile.txt")
40 голосов
/ 30 января 2012

Я бы использовал следующее.Это должно работать просто отлично, и не кажется уродливым, по крайней мере, мне:

singleString <- paste(readLines("foo.txt"), collapse=" ")
11 голосов
/ 30 января 2012

Как насчет:

string <- readChar("foo.txt",nchars=1e6)
6 голосов
/ 29 июля 2015

В пакете readr есть функция, которая сделает все за вас.

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

Это заменяет версию в пакете stringr.

3 голосов
/ 06 июня 2015

Жаль, что решение Шарона больше нельзя использовать.Я добавил решение Джоша О'Брайена с модификацией asieira в мой файл .Rprofile:

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

и использую его так: txt = read.text('path/to/my/file.txt').Я не мог воспроизвести находку Бэмпкина (28 окт. 14), и writeLines(txt) показал содержание file.txt.Кроме того, после write(txt, '/tmp/out') команда diff /tmp/out path/to/my/file.txt не сообщила об отличиях.

1 голос
/ 24 февраля 2015

readChar не обладает большой гибкостью, поэтому я объединил ваши решения (readLines и paste).

Я также добавил пробел между каждой строкой:

con <- file("/Users/YourtextFile.txt", "r", blocking = FALSE)
singleString <- readLines(con) # empty
singleString <- paste(singleString, sep = " ", collapse = " ")
close(con)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...