Есть ли функция в 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
имеют разные значения, которые важны для понимания. Однако я считаю эту функцию полезной, когда я создаю функции, содержащие необязательные аргументы со значениями по умолчанию, которые я хочу разрешить пользователю подавлять, установив их в любое значение "undefined".
Одним из таких примеров является xlab
of plot
. Я никогда не запомню, если это xlab=NA
, xlab=FALSE
, xlab=NULL
или xlab=""
. Некоторые из них дают желаемый результат, а некоторые - нет, поэтому я нашел удобным использовать все вышеперечисленные функции при разработке кода, особенно если другие люди тоже его используют.
У меня тоже была очень похожая проблема. Я пытался проверить, правильны ли имена строк для данной матрицы или фрейма данных.
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))
Я считаю, что вы в основном ищете функцию gtools
invalid().
?gtools::invalid
Например,
gtools::invalid(NA)
[1] TRUE
gtools::invalid(NULL)
[1] TRUE
gtools::invalid(NaN)
[1] TRUE
Рассмотрим is.finite()
:
!is.finite(NA)
# TRUE
!is.finite(NaN)
# TRUE
Но это не работает для NULL
или ввода символа:
!is.finite(NULL)
# logical(0)
!is.finite("foo")
# TRUE
Также (естественно)
!is.finite(Inf)
# TRUE