Ho affrontato uno strano comportamento in R con la funzione sapply()
. Questa funzione dovrebbe restituire un vettore, ma nel caso particolare in cui gli dai un vettore vuoto, restituisce una lista.Perché sapply() restituisce una lista?
comportamento corretto con un vettore:
a = c("A", "B", "C")
a[a == "B"] # Returns "B"
a[sapply(a, function(x) {x == "B"})] # Returns "B"
comportamento corretto con un valore NULL:
a = NULL
a[a == "B"] # Returns NULL
a[sapply(a, function(x) {x == "B"})] # Returns NULL
comportamento sconosciuto con un vettore vuoto:
a = vector()
a[a == "B"] # Returns NULL
a[sapply(a, function(x) {x == "B"})] # Erreur : type 'list' d'indice incorrect
messaggio di errore Come con questa dichiarazione:
a[list()] # Erreur dans a[list()] : type 'list' d'indice incorrect
Perché? E 'un errore?
A causa di questo strano comportamento, utilizzo unlist(lapply())
.
Proteggi- non è mai un bug –
@ChrisBeeley - Mai un bug, sempre una "feature" ;-) R (e S) hanno un po 'di "caratteristiche" tutt'altro che ideali, e questo è uno di loro . '1: 0' è un altro ... – Tommy