如何在 R 中验证 readLines() 输入作为数字与字符

how to validate readLines() input as numeric vs. character in R

提问人:alejandro_hagan 提问时间:9/15/2023 最后编辑:alejandro_hagan 更新时间:10/30/2023 访问量:46

问:

我正在强制输入,我理解该输入将接受任何输入、字符或数字,并将其捕获为字符值。然后,我想使用 将输入转换为数值。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))
R 向量 类型转换 数值

评论


答:

3赞 benson23 9/15/2023 #1

我相信你可以用它来测试结果。如果无法转换为有效的数值,则返回 。!is.naas.numericas.numericNA

!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 解决方案提供了它。谢谢!