字符串中有多个句点时,parse_number是否应该失败?

时间:2018-12-04 14:15:29

标签: r readr

在R的readr包中,当字符串中包含多个句点时,parse_number函数将失败。这是错误,还是设计使然?

示例如下:

> library(readr)
> parse_number("asf125")
[1] 125
> parse_number("asf.125")
[1] 0.125
> parse_number(".asf.125")
Warning: 1 parsing failure.
row # A tibble: 1 x 4 col     row   col expected actual expected   <int> <int>    <chr>  <chr> actual 1     1    NA a number      .

[1] NA
attr(,"problems")
# A tibble: 1 x 4
    row   col expected actual
  <int> <int>    <chr>  <chr>
1     1    NA a number      .

1 个答案:

答案 0 :(得分:0)

这会提取任意可能的浮点数,并在字符串中带有符号:

as.numeric(stringi::stri_match_first_regex(
  c("asf125", "asf.125", ".asf.125"), 
  "[-+]?[[:digit:]]*\\.?[[:digit:]]+"
)[,1])
## [1] 125.000   0.125   0.125

这只会产生积极或消极的“信号”:

as.numeric(stringi::stri_match_first_regex(
  c("asf125", "asf.125", ".asf.125"), 
  "[-+]?[[:digit:]]+"
)[,1])
## [1] 125 125 125

依靠readr::parse_number()之类的通用函数似乎充满了危险。