R中是否有一个行为如下的函数:
isnothing = function(x) {
is.null(x) | is.na(x) | is.nan(x)
}
我也错过了这样的功能,并将其添加到我的.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 提到的NA
,NaN
和NULL
具有不同的含义,需要理解。但是,当我使用默认值创建包含可选参数的函数时,我发现这个函数很有用,我希望允许用户通过将它们设置为任何“未定义”值来抑制它们。
一个这样的例子xlab
是plot
。我永远记不得是xlab=NA
,xlab=FALSE
还是. 有些会产生预期的结果,有些则不会,所以我发现在开发代码时使用上述功能很方便,特别是如果其他人也会使用它。xlab=NULL
xlab=""
我相信您基本上是在寻找gtools
invalid() 函数的作用。
?gtools::invalid
例如,
gtools::invalid(NA)
[1] TRUE
gtools::invalid(NULL)
[1] TRUE
gtools::invalid(NaN)
[1] TRUE
我也有一个非常相似的问题。我试图检查给定矩阵或数据框的行名是否正确。
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))