20

R中是否有一个行为如下的函数:

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

3 回答 3

16

我也错过了这样的功能,并将其添加到我的.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具有不同的含义,需要理解。但是,当我使用默认值创建包含可选参数的函数时,我发现这个函数很有用,我希望允许用户通过将它们设置为任何“未定义”值来抑制它们。

一个这样的例子xlabplot。我永远记不得是xlab=NA,xlab=FALSE还是. 有些会产生预期的结果,有些则不会,所以我发现在开发代码时使用上述功能很方便,特别是如果其他人也会使用它。xlab=NULLxlab=""

于 2013-10-29T10:41:57.730 回答
6

我相信您基本上是在寻找gtoolsinvalid() 函数的作用。

 ?gtools::invalid

例如,

gtools::invalid(NA)
[1] TRUE
gtools::invalid(NULL)
[1] TRUE
gtools::invalid(NaN)
[1] TRUE
于 2016-04-08T13:28:27.590 回答
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))
于 2013-11-07T15:48:28.673 回答