处理R中的readLines()函数

时间:2014-04-11 00:38:07

标签: r readlines

我最近经历了一段非常困难的时光。

我不是专家用户,但我正在尝试使用R来读取纯文本(.txt)文件并捕获它的每一行。在那之后,我想处理这些行并在文本中进行一些中断和更改。

以下是我正在使用的代码:

fileName <- "C:/MyFolder/TEXT_TO_BE_PROCESSED.txt"
con <- file(fileName,open="r")
line <- readLines(con)
close(con)

它完整地读取文本和换行符。但我不明白创建的对象line是如何工作的。

使用此代码创建的对象line具有类:character和长度[57]。 如果我输入line[1],它会准确显示第一行的文字。但如果我输入

length(line[1])

它会返回[1]

我想知道如何将包含518的length == 1字符串实际转换为length == 518字符串。

有谁知道我做错了什么?

我不一定要使用readLines()函数。我做了一些研究,并且发现了函数scan(),但最后我的结果与518个字符的不可变字符串相同,但是length == 1

希望我对自己的怀疑一直很清楚。抱歉英语不好。

3 个答案:

答案 0 :(得分:5)

您可以先将该代码压缩成一行,其他3行只是制作您不需要的对象。

line <- readLines("C:/MyFolder/TEXT_TO_BE_PROCESSED.txt")

如果你想知道每行有多少空格分隔的单词

words <- sapply(line,function(x) length(unlist(strsplit(x,split=" "))))

如果遗漏上面的length参数,你会得到每行单词的字符向量列表。

答案 1 :(得分:5)

假设txt是您使用readLines读入的数据第1行的文字。
然后,如果你想将它分成单独的字符串,每个字符串都是一个单词,那么你可以使用strsplit,在每个单词之间的空格处分开。

> txt <- paste0(letters[1:10], LETTERS[1:10], collapse = " ")
> txt
## [1] "aA bB cC dD eE fF gG hH iI jJ"   ## character vector of length 1
> length(txt)
[1] 1
> newTxt <- unlist(strsplit(txt, split = "\\s"))  ## split the string at the spaces
> newTxt
## [1] "aA" "bB" "cC" "dD" "eE" "fF" "gG" "hH" "iI" "jJ"
## now the text is a character vector of length 10  
> length(newTxt)
[1] 10

答案 2 :(得分:1)

怎么样:

con <- file(fileName, open='r')
text <- readLines(con)[[1]]

获取文件第一行的文本。