问题
对于较大的文件,这些默认设置并不总是有效。有两个基本问题:
- 前一千行可能是一种特殊情况,而 readr 猜测的类型可能不够通用。例如,你可能有一列双精度数,但在前 1000 行中只包含整数。
- 该列可能包含大量缺失值。如果前 1000 行只包含 NA,readr 会猜测它是一个字符向量,而你可能希望将其解析为更具体的类型。
readr 包含一个具有挑战性的 CSV 文件,它同时展示了这两个问题:
challenge <- read_csv(readr_example("challenge.csv")) #> 使用列规范进行解析: #> cols( #> x = col_integer(), #> y = col_character() #> ) #> 警告:1000 个解析失败。 #> 行 列 期望 实际 #> 1001 x 无尾随字符 .23837975086644292 #> 1002 x 无尾随字符 .41167997173033655 #> 1003 x 无尾随字符 .7460716762579978 #> 1004 x 无尾随字符 .723450553836301 #> 1005 x 无尾随字符 .614524137461558 #> .... ... ...................... .................. #> 详情请参见 problems(...)
(注意这里使用了 readr_example(),它可以找到包中附带文件之一的路径。)
这里打印了两个输出:通过查看前 1000 行生成的列规范,以及前五个解析失败。显式地提取出 problems() 总是一个好主意,这样你可以更深入地探索它们:
problems(challenge) #> # 一个 tibble:1,000 × 4 #> 行 列 期望 实际 #>