R中是否有一个表现如下的函数:
isnothing = function(x) {
is.null(x) | is.na(x) | is.nan(x)
}
答案 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所提到的,NA
,NaN
和NULL
具有不同的含义,这些含义非常重要。但是,当我创建包含带有默认值的可选参数的函数时,我发现此函数很有用,我希望通过将用户设置为任何“未定义”值来禁止用户。
其中一个例子是xlab
的{{1}}。我永远不会记得它是plot
,xlab=NA
,xlab=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))