将文本文件导入为单个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)