在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 .
答案 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()
之类的通用函数似乎充满了危险。