←
PDF 156 / 520 parse\integer(c("1", "231", ".", "456"), na = ".") #> [1] 1 231 NA 456
→
English · PDF 156
Original PDF page 156
中文 · PDF 156

parse_integer(c("1", "231", ".", "456"), na = ".") #> [1] 1 231 NA 456

如果解析失败,你会得到一个警告:

x <- parse_integer(c("123", "345", "abc", "123.45")) #> Warning: 2 parsing failures. #> row col expected actual #> 3 -- an integer abc #> 4 -- no trailing characters .45

并且失败的部分会在输出中缺失:

x #> [1] 123 345 NA NA #> attr(,"problems") #> # A tibble: 2 × 4 #> row col expected actual #> #> 1 3 NA an integer abc #> 2 4 NA no trailing characters .45

如果解析失败很多,你需要使用 problems() 来获取完整的集合。它返回一个 tibble,然后你可以用 dplyr 对其进行操作:

problems(x) #> # A tibble: 2 × 4 #> row col expected actual #> #> 1 3 NA an integer abc #> 2 4 NA no trailing characters .45

使用解析器主要是要了解有哪些可用的解析器,以及它们如何处理不同类型的输入。有八个特别重要的解析器:

  • parse_logical() 和 parse_integer() 分别用于解析逻辑值和整数。这些解析器基本上不会出什么问题,所以我在这里不再进一步介绍。
  • parse_double() 是一个严格的数值解析器,而 parse_number() 是一个灵活的数值解析器。它们比你想象的更复杂,因为世界上不同地区书写数字的方式不同。
  • parse_character() 看起来非常简单,似乎没有必要存在。但有一个复杂之处使它相当重要:字符编码。