
112
|
第
4
章
4.15 读取复杂格式数据文件
4.15.1 问题
你希望读取一个复杂或非常规格式的数据文件。
4.15.2 解决方案
使用 readLines 函数读取各行,然后将它们作为字符串处理以提取数据项。
或者,使用 scan 函数读取每一个单元,并使用 what 参数描述文件中单元流。该函数
可以将单元转换为数据,然后将数据组合成数据记录。
4.15.3 讨论
如果所有数据都用整齐的表格形式存放,那么工作将变得很轻松。我们可以使用 readr
包中的一个函数读取这些文件,然后轻松完成任务。
然而实际中并未如此完美!
你总会遇到某种奇异的文件格式,而你的工作是将文件的内容读入 R。
read.table 和 read.csv 函数是面向行来读取数据的,因此可能对这种数据无能为
力。然而,readLines 和 scan 函数能解决这类问题,因为它们允许你基于每一行甚
至每一个单元读取数据。
readLines 函数非常简单。它从文件中读取各行并将其作为字符串列表返回:
lines <- readLines("input.txt")
你可以使用参数 n 限制要读入的最大行数:
lines <- readLines("input.txt", n = 10) # Read 10 lines and stop
scan 函数内容更为丰富。它一次读取一个单元(token),并根据指令进行处理。其中第
一个参数是文件名或链接,第二个参数称为 what,描述 scan 函数所期望的输入文件
的单元。what 参数的描述比较神秘但很奇妙: ...