9

我最近在使用 R 时遇到了非常困难的情况。

我不是专家用户,但我正在尝试使用 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]

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

有谁知道我做错了什么?

我不一定需要使用该readLines()功能。我做了一些研究,也找到了这个函数scan(),但我以同样的情况结束了 518 个字符的不可变字符串,但是length == 1

希望我对我的怀疑已经足够清楚了。对不起英语不好。

4

3 回答 3

5

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

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

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

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

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

于 2014-04-11T01:35:50.780 回答
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
于 2014-04-11T03:41:01.060 回答
1

怎么样:

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

获取文件第一行的文本。

于 2016-06-04T16:11:45.330 回答