将文本文件导入为单个string

如何在R中导入纯文本文件作为单个string? 我认为这可能会有一个非常简单的答案,但是当我今天尝试这个时,我发现我找不到一个function来做到这一点。

例如,假设我有一个文件foo.txt与我想textmine的东西。

我尝试过:

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

但是这仍然是一个向量。 我得到它的工作有点:

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

但这是一个相当不好的解决办法,可能也不稳定。

以下是@JoshuaUlrich解决scheme的一个变体,它使用正确的大小而不是硬编码的大小:

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

请注意,readChar为指定的字节数分配空间,所以readChar(fileName, .Machine$integer.max)不能正常工作。

如果有人在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") 

我会使用以下。 它应该工作得很好,至less对我来说,看起来并不难看:

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

怎么样:

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

太糟糕了,沙龙的解决scheme不能再用了。 我已经添加了Josh O'Brien的解决scheme,将asieira的修改添加到我的.Rprofile文件中:

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

并像这样使用它: txt = read.text('path/to/my/file.txt') 。 我不能复制bumpkin(28 writeLines(txt) )的发现, writeLines(txt)显示了file.txt的内容。 另外,在write(txt, '/tmp/out') ,命令diff /tmp/out path/to/my/file.txt报告没有区别。

readr软件包有一个function可以为你做所有事情。

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

这取代了包裹中的版本。

readChar没有太大的灵活性,所以我结合了你的解决scheme(readline和paste)。

我还在每行之间添加了一个空格:

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