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