C'è una funzione in R che si comporta in questo modo:Una funzione che restituisce TRUE su NA, NULL, NaN in R?
isnothing = function(x) {
is.null(x) | is.na(x) | is.nan(x)
}
C'è una funzione in R che si comporta in questo modo:Una funzione che restituisce TRUE su NA, NULL, NaN in R?
isnothing = function(x) {
is.null(x) | is.na(x) | is.nan(x)
}
mi mancava anche tale funzione e aggiunto questo ai miei .Rprofile
secoli fa. Se qualcuno conosce una funzione di base che fa la stessa cosa voglio anche sapere.
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))
)
}
Come @shadow accennato, NA
, NaN
e NULL
hanno significati differenti che sono importanti per capire. Tuttavia, trovo questa funzione utile quando creo funzioni contenenti argomenti facoltativi con valori predefiniti, che voglio consentire all'utente di sopprimerli impostandoli su qualsiasi valore "non definito".
Uno di questi esempi è xlab
di plot
. Non ricordo mai se è xlab=NA
, xlab=FALSE
, xlab=NULL
o xlab=""
. Alcuni producono il risultato desiderato e altri no, quindi ho trovato conveniente prendere tutto con la funzione precedente quando sviluppo codice, in particolare se anche altre persone lo useranno.
consideri is.finite()
:
!is.finite(NA)
# TRUE
!is.finite(NaN)
# TRUE
Ma non funziona per NULL
o inserimento dei caratteri:
!is.finite(NULL)
# logical(0)
!is.finite("foo")
# TRUE
anche (naturalmente)
!is.finite(Inf)
# TRUE
er ... 'is.finite (1)' ?? -1 –
Non si intende restituire "VERO" a 1? Come ho detto, ottiene 'NULL' e' Inf' sbagliati, ma potrebbe essere nella giusta direzione per OP. – Hugh
Non penso che una funzione intitolata 'isnothing()' debba restituire 'TRUE' dato e input' 1', no. Scusate, cerco di evitare di votare, ma non penso che questa sia davvero una risposta utile e comunque non passa neanche tutti i test nell'OP. Bel tentativo però! –
Ho avuto un problema molto simile pure. Stavo cercando di verificare se i nomi delle righe di una data matrice o di un frame di dati sono corretti.
x <- matrix(1:6,ncol=2)
isnothing = function(x) {
any(is.null(x)) | any(is.na(x)) | any(is.nan(x))
}
isnothing(rownames(x))
La funzione genera un errore. Ma quando ho usato il cortocircuito e l'ho cambiato in:
isnothing = function(x) {
any(is.null(x)) || any(is.na(x)) || any(is.nan(x))
}
isnothing(rownames(x))
Ha risolto il mio problema. Immagino di controllare prima la nullità e poi di andare avanti per controllare altri casi se è FALSE risolto il mio problema. L'ho controllato con un paio di casi problematici a cui riesco a pensare e ha funzionato. Non so se ci sono delle eccezioni ma per ora ha funzionato per i miei scopi.
rownames(x) <- c("a",NaN,NA)
isnothing(rownames(x))
Credo si sono fondamentalmente alla ricerca di ciò che gtools
valida funzione() fa.
?gtools::invalid
Per esempio,
gtools::invalid(NA)
[1] TRUE
gtools::invalid(NULL)
[1] TRUE
gtools::invalid(NaN)
[1] TRUE
Io davvero non credo che ci sia una funzione di base che fa questo. NULL e NA sono due cose completamente diverse, e il test che stai suggerendo è l'inserimento dei due concetti. – shadow
Il punto di tale funzione sarebbe la codifica difensiva quando si tratta di utenti inesperti e/o incompetenti, molti dei quali presenti nella comunità R. – Backlin
@Backlin la difesa del go-to per quello scenario * dovrebbe essere * ** RTFM **. Penso che educare la comunità sia meglio che assumere che siano stupidi (ma +1 per la tua funzione). –