我最近经历了一段非常困难的时光。
我不是专家用户,但我正在尝试使用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
。
希望我对自己的怀疑一直很清楚。抱歉英语不好。
答案 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]]
获取文件第一行的文本。