在R中是否有像这样的函数:
isnothing = function(x) {
is.null(x) | is.na(x) | is.nan(x)
}
在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
具有不同的含义,理解这点很重要。然而,当我制作包含可选参数默认值的函数,并希望用户通过将它们设置为任何“未定义”值来禁用它们时,我发现这个函数非常有用。
其中一个例子是plot
的xlab
。我永远记不住是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))
rownames(x) <- c("a",NaN,NA)
isnothing(rownames(x))