Как вы импортируете простой текстовый файл в виде отдельной символьной строки в R? Я думаю, что это, вероятно, будет очень простым ответом, но когда я пробовал это сегодня, я обнаружил, что не могу найти функцию для этого.
Например, предположим, что у меня есть файл foo.txt
с чем-то, что я хочу textmine.
Я попробовал:
scan("foo.txt", what="character", sep=NULL)
но это все равно возвращает вектор. Я немного работал с ним:
paste(scan("foo.txt", what="character", sep=" "),collapse=" ")
но это довольно уродливое решение, которое, вероятно, также нестабильно.
Здесь вариант решения от @JoshuaUlrich, который использует правильный размер вместо жестко заданного размера:
fileName <- 'foo.txt'
readChar(fileName, file.info(fileName)$size)
Обратите внимание, что readChar выделяет пространство для количества заданных вами байтов, поэтому readChar(fileName, .Machine$integer.max)
не работает хорошо...
nchars=
. :)
В случае, если кто-то все еще смотрит на этот вопрос через 3 года, пакет Hadley Wickham 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")
readr
. Я соответственно обновил ответ - надеюсь, Шарон не против.
Я бы использовал следующее. Он должен работать нормально, и не кажется уродливым, по крайней мере для меня:
singleString <- paste(readLines("foo.txt"), collapse=" ")
collapse="\n"
будет повторять тот факт, что это отдельные строки в исходном файле. С этим изменением это решение будет одинаково хорошо работать для сжатых и несжатых файлов.
Как насчет:
string <- readChar("foo.txt",nchars=1e6)
nchars=1e6
...
В пакете 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.
Слишком плохо, что решение Sharon больше нельзя использовать. Я добавил решение Josh O'Brien с модификацией 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
не сообщила о различиях.
readChar не имеет большой гибкости, поэтому я объединил ваши решения (readLines и paste).
Я также добавил пробел между каждой строкой:
con <- file("/Users/YourtextFile.txt", "r", blocking = FALSE)
singleString <- readLines(con) # empty
singleString <- paste(singleString, sep = " ", collapse = " ")
close(con)
readr::read_file
теперь прекрасно решает эту проблему.