是否有R A函數的行爲是這樣的:函數在R,NA,NULL,NaN上返回TRUE?
isnothing = function(x) {
is.null(x) | is.na(x) | is.nan(x)
}
是否有R A函數的行爲是這樣的:函數在R,NA,NULL,NaN上返回TRUE?
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=""
。有些產生了期望的結果,有些則不產生,因此我發現在開發代碼時可以方便地使用上述功能,特別是如果其他人也會使用它。
考慮is.finite()
:
!is.finite(NA)
# TRUE
!is.finite(NaN)
# TRUE
但它並不適用於NULL
或字符輸入工作:
!is.finite(NULL)
# logical(0)
!is.finite("foo")
# TRUE
也(自然)
!is.finite(Inf)
# TRUE
呃......'is.finite(1)'? -1 –
這並不意味着返回1上的TRUE?正如我所說的,它會得到'NULL'和'Inf'錯誤,但它可能是OP的正確方向。 – Hugh
我不認爲一個名爲'isnothing()'的函數應該返回給定的'TRUE'並輸入'1',否。對不起,我儘量避免投票,但我不認爲這真的是一個有用的答案,它甚至不通過OP中的所有測試。不錯,儘管嘗試! –
我有一個非常類似的問題太。我試圖檢查給定矩陣或數據框的行名是否正確。
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
我真的不覺得有什麼,這是否與基函數。 NULL和NA是兩個完全不同的東西,你所建議的測試是融合這兩個概念。 – shadow
當處理無經驗和/或無能的用戶時,這種功能的要點就是防禦性編碼,R用戶中有許多用戶。 – Backlin
@Backlin該場景的前衛防守*應該是* ** RTFM **。我認爲教育社區比假設他們愚蠢更好(但是爲你的功能+1)。 –