【问题标题】:How to check if the value is numeric?如何检查值是否为数字?
【发布时间】:2012-10-29 09:08:57
【问题描述】:

谁能帮我修改下面的函数来检查一个数字是否为数字?

# handy function that checks if something is numeric
check.numeric <- function(N){
  !length(grep("[^[:digit:]]", as.character(N)))
}

check.numeric(3243)
#TRUE
check.numeric("sdds")
#FALSE
check.numeric(3.14)
#FALSE

我希望 check.numeric() 在像 3.14 这样的小数时返回 TRUE

【问题讨论】:

  • 为什么is.numeric不够...?
  • 哦哈哈我不知道已经有一个内置的 R 函数可以做到这一点。谢谢,这正是我需要的功能。不过我仍然需要帮助。见下方评论
  • @joran 我正在处理的脚本is.numeric(x),其中x 被赋值为x&lt;- NA_real_,结果为TRUE。我该如何解决这个问题?
  • 听起来您有两件事要检查:is.numericis.na
  • 我相信这就是NA_real_ 的意义所在——同时是NA 和数字。

标签: r regex decimal numeric


【解决方案1】:

听起来你想要这样的功能:

f <- function(x) is.numeric(x) & !is.na(x)

【讨论】:

  • 修复了错误再次感谢(我会给你竖起大拇指)但现在我收到了一个稍微不相关的错误:evaluation nested too deeply: infinite recursion / options(expressions=)?
  • @user1313954 没有线索。你必须在一个单独的问题中询问这个问题。 (但请务必提供相关代码和大量细节。根据您目前分享的内容,任何人都无法提供帮助。)
  • @user1313954,您是否调用了您的函数is.numeric 并让它调用了is.numeric 函数?如果是这样,那将导致无限递归,因为您的函数会不断调用自身。最好为您的函数使用不同的名称,否则您可以使用 :: 表示法来确保调用正确版本的 is.numeric
  • @GregSnow 我确实调用了函数is.numeric 并让它调用了is.numeric 函数。我将函数名称改回f 并再次编译,但我仍然遇到同样的错误。你能再次提醒我如何使用:: 表示法来确保我调用的是is.numeric 的正确版本吗?
  • @user1313954,:: 符号就是base::is.numeric(x)。但是您的问题可能是您仍然有错误版本的is.numeric 被新函数调用。您需要删除它 (rm(is.numeric))。
【解决方案2】:

您可以使用is.finite 来测试该值是否为数字和非NA。这适用于数值、整数和复数值(如果实部/虚部都是有限的)。

> is.finite(NA)
[1] FALSE
> is.finite(NaN)
[1] FALSE
> is.finite(Inf)
[1] FALSE
> is.finite(1L)
[1] TRUE
> is.finite(1.0)
[1] TRUE
> is.finite("A")
[1] FALSE
> is.finite(pi)
[1] TRUE
> is.finite(1+0i)
[1] TRUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-28
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多