代码之家  ›  专栏  ›  技术社区  ›  alejandro_hagan

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

  •  0
  • alejandro_hagan  · 技术社区  · 2 年前

    我正在强制来自 readLines() 据我所知,它将接受任何输入,字符或数字,并将其捕获为字符值。然后我想使用 as.numeric()

    然后我想使用验证测试,例如 is.numeric() 以检查用户是否使用assertthat包输入了5与字符串“five”。

    然而,当我强迫一个字符向量(例如“五”) as.numberic() 它将产生NA输出。使用测试NA输出时 是.numberic() 它将产生一种真正的挫败感

    我如何验证用户是否输入了给定的数值 readLines() 将所有内容转换为字符矢量?

    #both of the below produce TRUE 
      is.numeric(as.numeric("five"))
      is.numeric(as.numeric(5))
    
    1 回复  |  直到 2 年前
        1
  •  3
  •   benson23    2 年前

    我相信你可以 !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