31.readr包里read系列函数的全部参数解析
【上一篇:30.关于readr包里的read系列函数】
【下一篇:32.关于parse系列函数之解析数字】
下面这四个函数,总共17个参数,14个参数是共有的,只有read_delim()多了3个参数。

公共参数
file参数上一篇中有详细说明,不再赘述。
quote:用于引用字符串的单个字符。
col_names:参数上一篇中也有说明,另外,如果列名中有重复,则会在重复值后面加数字后缀以作区分。
col_types:可以是NULL,一个cols()规范或字符串。如果是NULL,则默认用输入文件的前1000行判断列类型;如果是一个由cols()函数创建的列规范,则每一列都必须对应一个列规范;也可以使用紧凑的字符串指定列类型:c = character,i = integer,n = number,d = double,l = logical,f = factor,D = date,T = date time,t = time,? = guess,_ or - = skip
> read_csv("x,y\n1,2\n3,4", col_types = "dc")
# A tibble: 2 x 2
x y
<dbl> <chr>
1 1 2
2 3 4
locale:区域设置控制的default因地点而异。默认的地区是以美国为中心的(如R),但您可以使用locale()创建自己的地区,控制诸如默认时区、编码、小数点、大标记和日/月名称等内容。
na:上一篇也有说明:
quoted_na:是否应该将引号内的缺失值视为缺失值,默认为TRUE。
comment:见上一篇。
trim_ws:trim white space,在解析每个字段之前,是否应该修剪前导和尾随空格?默认为TRUE。
> read_csv("a,b,c\n1.0,2.0,3.0\nA,B,C\n A1, B1 ,C1 ")
# A tibble: 3 x 3
a b c
<chr> <chr> <chr>
1 1.0 2.0 3.0
2 A B C
3 A1 B1 C1
> read_csv("a,b,c\n1.0,2.0,3.0\nA,B,C\n A1, B1 ,C1 ",trim_ws=F)
# A tibble: 3 x 3
a b c
<chr> <chr> <chr>
1 "1.0" "2.0" "3.0"
2 "A" "B" "C"
3 " A1" " B1 " "C1 "
n_max:读取的最大记录数(行数)。
guess_max:用于猜测列类型的最大记录数。
progress:是否显示进度条。默认(必须在在交互会话模式下)当预估读取时间超过5秒时,每50000个值显示一次进度。通过设置options(readr.show_progress = FALSE)可关闭。
skip_empty_rows:是否跳过空行。如果是FALSE的话,空行对应的每一列都解析成NA。
非公共参数
delim:用于在一条记录中分隔字段的单个字符。
escape_backslash:文件是否使用反斜杠来转义特殊字符。默认是FLASE
escape_double:文件是否通过加倍引号来转义?例如,如果该选项为TRUE,则值""""表示一个单引号,\"。

上图中的三个函数比第一张图的四个少很多参数,只有read_fwf()函数多了一个col_positions参数,这个参数的值用fwf_empty()、fwf_widths()或fwf_positions()函数指定。read_table()等三个函数是用来读取textual data类型的数据,read_csv()等四个是用来读取flat file data的最常见类型数据。
后三个函数都没有quote和quote_na参数,也就是说这些函数会把文件中出现的各种字符(除空白符)都原样展示?read_table()函数之所以没有trim_ws参数是因为函数本身就是要读以空白符分割的文件。
read_table()和read_table2()的参数完全相同。两者的区别在于:
a) read_table()比read_table2()更严格,每一行的长度必须相同(也就是说每一行所有字符(包括空白符)长度之和应一致),每行中每个字段的位置相同(如下图,read_table()可以正确将第三行的"J Sm"、"M J"解析到一列中,而read_table2()不行)。它首先找到空列,然后像固定宽度文件一样解析。

> read_table("1 2 10 11 AAA BBB
21 233 AAAAA BBB CCC DDD
J Sm M J J.Smi VVV M TT",col_names=F)
# A tibble: 3 x 6
X1 X2 X3 X4 X5 X6
<chr> <chr> <chr> <chr> <chr> <chr>
1 1 2 10 11 AAA BBB
2 21 233 AAAAA BBB CCC DDD
3 J Sm M J J.Smi VVV M TT
# read_table2()虽然可以允许任意数量的空白符在列之间,也允许每行长度不一
# 但会丢失一些列(例如下面的第三列)
> read_table2("1 2 10 11 AAA BBB
21 233 AAAAA BBB CCC DDD
J Sm M J J.Smi VVV M TT",col_names=F)
Warning: 1 parsing failure.
row col expected actual file
3 -- 6 columns 8 columns literal data
# A tibble: 3 x 6
X1 X2 X3 X4 X5 X6
<chr> <chr> <chr> <chr> <chr> <chr>
1 1 2 10 11 AAA BBB
2 21 233 AAAAA BBB CCC DDD
3 J Sm M J J.Smi VVV
b) read_table2()类似于read.table(),它允许任意数量的空白字符在列之间,并且行可以是不同的长度。
read_log()函数用得好少,不解释。
记住以一个参数,其他参数中,col_names、skip、comment、na、qoute可以解决实际会遇到的~75%的问题。