read.delim
以表格格式读取数据(包括行和列,如在 Excel 中)。它对于阅读一串文本不是很有用。
要将文本文件中的文本读入 R,您可以使用readLines()
. readLines()
创建一个包含与文本行一样多的元素的字符向量。对于此类软件,行是任何以换行符结尾的文本字符串。(阅读 Wikipedia 上的换行符。)编写文本时,按 输入系统特定的换行符Return
。实际上,一行文本不是由软件窗口的宽度定义的,而是可以跨越许多可视行。实际上,一行文本就是一本书中的一个段落。因此readLines()
,在段落中拆分您的文本:
> readLines("/path/to/tom_sawyer.txt")
[1] "\"TOM!\""
[2] "No answer."
[3] "\"TOM!\""
[4] "No answer."
[5] "\"What's gone with that boy, I wonder? You TOM!\""
[6] "No answer."
[7] "The old lady pulled her spectacles down and looked over them about the room; then she put them up and looked out under them. She seldom or never looked through them for so small a thing as a boy; they were her state pair, the pride of her heart, and were built for \"style,\" not service—she could have seen through a pair of stove-lids just as well. She looked perplexed for a moment, and then said, not fiercely, but still loud enough for the furniture to hear:"
[8] "\"Well, I lay if I get hold of you I'll—\"
请注意,您可以在 Stackoverflow 中将长文本滚动到左侧。第七行比这列宽。
如您所见,readLines()
将那长长的第七段读为一行。而且,您还可以看到,readLines()
在每个引号前添加了一个反斜杠。由于 R 将各个行放在引号中,因此需要将这些行与原始文本中的行区分开来。因此,它“转义”了原始引号。在 Wikipedia 上阅读有关转义的信息。
readLines()
可能会输出在您的文件中发现“不完整的最后一行”的警告。这仅意味着最后一行之后没有换行符。您可以使用 取消此警告readLines(..., warn = FALSE)
,但您不必这样做,这不是错误,并且取消警告只会取消警告消息。
如果您不想只将文本输出到 R 控制台而是进一步处理它,请创建一个包含以下输出的对象readLines()
:
mytext <- readLines("textfile.txt")
此外readLines()
,您还可以使用scan()
,readBin()
和其他功能从文件中读取文本。通过输入?scan
etc 查看手册。查看?connections
以了解将文件读入 R 的许多不同方法。
我强烈建议您在 Vim、Notepad、TextWrangler 等文本编辑器中将文本写入 .txt 文件,而不是在 MS Word 等文字处理器中编写。Word 文件包含的不仅仅是您在屏幕上看到的或打印出来的文本,而且这些文本将被 R 读取。您可以尝试看看您得到了什么,但为了获得良好的结果,您应该将文件保存为 Word 中的 .txt 文件,或者在文本编辑器中编写它。
您还可以将在任何其他软件中打开的文本文件中的文本复制粘贴到 R 或在 R 控制台中编写文本:
myothertext <- c("What did you do?
+ I wrote some text.
+ Ah, interesting.")
> myothertext
[1] "What did you do?\nI wrote some text.\nAh, interesting."
请注意Return
,在我用 . 关闭字符串之前,输入不会导致 R 执行命令")
。R 只是回复+
,告诉我我可以继续编辑。我没有输入这些优点。尝试一下。另请注意,现在换行符是您的文本字符串的一部分。(我在 Mac 上,所以我的换行符是\n
.)
如果您手动输入文本,我会将整个文本作为一个字符串加载到向量中:
x <- c("The text of your book.")
您可以将不同的章节加载到此向量的不同元素中:
y <- c("Chapter 1", "Chapter 2")
为了更好地参考,您可以命名元素:
z <- c(ch1 = "This is the text of the first chapter. It is not long! Why was the author so lazy?", ch2 = "This is the text of the second chapter. It is even shorter.")
现在您可以拆分这些向量中的任何一个的元素:
sentences <- strsplit(z, "[.!?] *")
进入?strsplit
阅读该功能的手册并了解它所需要的属性。第二个属性采用正则表达式。在这种情况下,我告诉strsplit
在三个标点符号中的任何一个处拆分向量的元素,然后是一个可选的空格(如果您没有在此处定义空格,则生成的“句子”前面将有一个空格)。
sentences
现在包含:
> sentences
$ch1
[1] "This is the text of the first chapter" "It is not long"
[3] "Why was the author so lazy"
$ch2
[1] "This is the text of the second chapter" "It is even shorter"
您可以通过索引访问各个句子:
> sentences$ch1[2]
[3] "It is not long"
R 将无法知道它不应该在“先生”之后拆分。您必须在正则表达式中定义异常。解释这一点超出了这个问题的范围。
你将如何告诉 R 如何识别主题或对象,我不知道。