Tracce
/
R
R
/
Programma
/
Il nulla
Il

Il nulla in R

1 esercizio

Informazioni su Il nulla

Molti linguaggi hanno un modo, come null o none, per indicare un valore inesistente. Dato che R è progettato per gestire grandi volumi di dati (spesso disordinati), ha diverse forme di nulla.

L'obiettivo generale è segnalare i valori mancanti o sospetti nel momento in cui li si incontra, e poi continuare senza sollevare un'eccezione.

NULL

Se un valore davvero non esiste, è rappresentato da NULL. Questo è probabilmente il comportamento più vicino a quello di C o Python.

v <- c() # zero-length vector
v
#> NULL
is.null(v)
#> [1] TRUE

In molti contesti, i valori NULL vengono semplicemente ignorati:

c(2, 3, NULL, 5)
#> [1] 2 3 5

NA

Nei casi in cui un valore esiste ma non sappiamo quale sia, si usa NA. Per esempio, quando si contano i veicoli che percorrono una strada, gli osservatori umani potrebbero ammalarsi o i sensori automatici rompersi, ma il traffico continua a scorrere.

v <- c(1, 2, NA, 4, 5)
v
#> [1]  1  2 NA 4  5
is.na(v) # test for data gaps
#> [1] FALSE FALSE  TRUE FALSE FALSE

Quindi NA è un segnaposto, che avverte chi legge che deve decidere come gestirlo.

Le funzioni statistiche di solito restituiscono NA per impostazione predefinita se sono presenti valori NA. Se vuoi che questi valori vengano ignorati, usa il parametro na.rm (NA remove) per renderlo esplicito:

v <- c(1, 2, NA, 4, 5)
mean(v)
#> [1] NA
mean(v, na.rm = TRUE)
#> [1] 3

NaN

Abbreviazione di «Not a Number», NaN segnala un problema di calcolo nelle situazioni in cui ci si aspettava un numero.

n <- c(0, 2, 4)
d <- c(0, 1, 2)
n / d
#> [1] NaN   2   2  # 0/0 is mathematically undefined
is.nan(n / d)
#> [1]  TRUE FALSE FALSE

Non è l'unica possibilità per i calcoli «non validi». Dividere per zero restituirà Inf o -Inf se il numeratore non è zero, senza sollevare un errore.

1 / 0
#> [1] Inf

Vettori vuoti

Forse in modo sorprendente, R non ha un modo standard per controllare se qualcosa è vuoto, anche se alcuni pacchetti di terze parti implementano funzioni proprie come is.empty().

Persino generare un vettore vuoto non è del tutto ovvio. Abbiamo visto in una sezione precedente che c() senza argomenti restituisce NULL, non un vettore.

is.vector(c())
#> [1] FALSE

Funzioni come logical() o integer() accettano un argomento che specifica la lunghezza desiderata, che può essere zero.

z <- logical(0)
is.vector(z)
#> [1] TRUE
length(z)
#> [1] 0

Possiamo anche generare un vettore e poi rimuoverne ogni elemento, come descritto nel concetto di vettori. Il risultato è un vettore di lunghezza 0 del tipo appropriato.

v <- 5
v[-1]  # delete the first element
#> numeric(0)
Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda

Impara Il nulla