处理R中的readLines()函数

use*_*631 9 r readlines

我最近和R一起经历了非常艰难的时期.

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

这是我正在使用的代码:

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

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

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

length(line[1])
Run Code Online (Sandbox Code Playgroud)

它回报了我[1].

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

有谁知道我做错了什么?

我不一定要使用这个readLines()功能.我已经做了一些研究并找到了这个函数scan(),但最终我的结果与518个字符的不可变字符串相同length == 1.

希望我对自己的怀疑一直很清楚.对不起英语不好.

Jer*_*myS 5

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

line <- readLines("C:/MyFolder/TEXT_TO_BE_PROCESSED.txt")
Run Code Online (Sandbox Code Playgroud)

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

words <- sapply(line,function(x) length(unlist(strsplit(x,split=" "))))
Run Code Online (Sandbox Code Playgroud)

如果省略length上面的参数,你会得到每行中单词的字符向量列表.


Ric*_*ven 5

假设txt您读入的数据的第1行的文本readLines.
然后,如果你想将它分成单独的字符串,每个字符串都是一个单词,那么你可以使用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
Run Code Online (Sandbox Code Playgroud)