一个函数在NA上返回TRUE,NULL,NaN在R?

时间:2013-10-29 10:28:47

标签: r

R中是否有一个表现如下的函数:

isnothing = function(x) {
    is.null(x) | is.na(x) | is.nan(x)
}

3 个答案:

答案 0 :(得分:11)

我也错过了这样一个功能,并将其添加到我的.Rprofile年前。如果有人知道基本功能做同样的事情我也想知道。

is.blank <- function(x, false.triggers=FALSE){
    if(is.function(x)) return(FALSE) # Some of the tests below trigger
                                     # warnings when used on functions
    return(
        is.null(x) ||                # Actually this line is unnecessary since
        length(x) == 0 ||            # length(NULL) = 0, but I like to be clear
        all(is.na(x)) ||
        all(x=="") ||
        (false.triggers && all(!x))
    )
}

正如@shadow所提到的,NANaNNULL具有不同的含义,这些含义非常重要。但是,当我创建包含带有默认值的可选参数的函数时,我发现此函数很有用,我希望通过将用户设置为任何“未定义”值来禁止用户。

其中一个例子是xlab的{​​{1}}。我永远不会记得它是plotxlab=NAxlab=FALSE还是xlab=NULL。有些产生了预期的结果,有些产生了没有,所以我发现在开发代码时使用上述功能很方便,特别是如果其他人也会使用它。

答案 1 :(得分:4)

我相信你基本上在寻找gtools无效()函数的作用。

 ?gtools::invalid

例如,

gtools::invalid(NA)
[1] TRUE
gtools::invalid(NULL)
[1] TRUE
gtools::invalid(NaN)
[1] TRUE

答案 2 :(得分:1)

我也有类似的问题。我试图检查给定矩阵或数据框的行名是否正确。

x <- matrix(1:6,ncol=2)
isnothing = function(x) {
  any(is.null(x))  | any(is.na(x))  | any(is.nan(x)) 
}
isnothing(rownames(x))

该函数将抛出错误。但当我使用短路并将其更改为:

isnothing = function(x) {
  any(is.null(x))  || any(is.na(x))  || any(is.nan(x)) 
}
isnothing(rownames(x))

它解决了我的问题。我想检查第一个无效然后继续检查其他情况,如果它是FALSE解决了我的问题。我检查了几个有问题的案例我能想到并且它有效。我不知道它是否有例外,但它现在适用于我的目的。

rownames(x) <- c("a",NaN,NA)
isnothing(rownames(x))