提问人:alejandro_hagan 提问时间:9/15/2023 最后编辑:alejandro_hagan 更新时间:10/30/2023 访问量:46
如何在 R 中验证 readLines() 输入作为数字与字符
how to validate readLines() input as numeric vs. character in R
问:
我正在强制输入,我理解该输入将接受任何输入、字符或数字,并将其捕获为字符值。然后,我想使用 将输入转换为数值。readLines()
as.numeric()
然后,我想使用验证测试,例如检查用户是否输入了 5 与字符串为“five”,并使用 assertthat 包。is.numeric()
但是,当我强制字符向量(例如。“five”) 将产生 NA 输出。当您用它测试 NA 输出时,将产生一个 TRUE 来破坏整个目的as.numeric()
is.numeric()
如何验证用户输入的给定数值是否将所有内容转换为字符向量?readLines()
#both of the below produce TRUE
is.numeric(as.numeric("five"))
is.numeric(as.numeric(5))
答:
3赞
benson23
9/15/2023
#1
我相信你可以用它来测试结果。如果无法转换为有效的数值,则返回 。!is.na
as.numeric
as.numeric
NA
!is.na(as.numeric("five"))
#> Warning: NAs introduced by coercion
#> [1] FALSE
!is.na(as.numeric("5"))
#> [1] TRUE
!is.na(as.numeric(5))
#> [1] TRUE
或者使用正则表达式查看整个输入是否完全由整数组成(仅用于测试整数,不用于测试浮点数)。^[0-9]+$
grepl("^[0-9]+$", "five")
#> [1] FALSE
grepl("^[0-9]+$", "fi55ve")
#> [1] FALSE
grepl("^[0-9]+$", "356236345")
#> [1] TRUE
grepl("^[0-9]+$", 5235)
#> [1] TRUE
创建于 2023-09-15 使用 reprex v2.0.2
评论
1赞
alejandro_hagan
9/15/2023
谢谢!我正在查看是否有另一种方法可以在不使用 is.na() 的情况下做到这一点,并且您的 regrex 解决方案提供了它。谢谢!
评论