Импорт текстового файла в виде отдельной символьной строки

Как вы импортируете простой текстовый файл в виде отдельной символьной строки в 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()