Comprendere NA in R
Impari cosa significa NA, perché si propaga e in cosa differisce da NULL.
Comprendere NA in R è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento R Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso R Academy include 4 lezioni in totale.
Che cos'è NA in R?
NA sta per Not Available (non disponibile) e rappresenta un valore mancante o sconosciuto. A differenza di NULL (assenza di un oggetto) o NaN (non è un numero), NA è un segnaposto per dati che esistono, ma sono sconosciuti.
# NA represents a missing value
height_cm <- c(175, NA, 162, 188, NA, 170)
cat('Heights:', height_cm, '
')
cat('Length:', length(height_cm), '
') # NA counts as an element
cat('Sum:', sum(height_cm), '
') # NA propagatesNA e NULL
NA è un valore mancante all'interno di un vettore: la posizione esiste, ma non contiene un valore noto. NULL è invece la completa assenza di un oggetto: ha lunghezza 0 e non può essere memorizzato all'interno di un vettore.
# NA: element exists, value unknown
vec_with_na <- c(1, NA, 3)
cat('Vector with NA, length:', length(vec_with_na), '
') # 3
# NULL: nothing there at all
vec_with_null <- c(1, NULL, 3)
cat('Vector with NULL, length:', length(vec_with_null), '
') # 2!
# NULL gets dropped; NA is kept
cat('vec_with_na:', vec_with_na, '
')
cat('vec_with_null:', vec_with_null, '
')NA e NaN
NaN (Not a Number, non è un numero) deriva da operazioni matematicamente non definite, come 0/0 o sqrt(-1). È un valore numerico speciale, mentre NA è un indicatore generico di valore mancante che può applicarsi a qualsiasi tipo.
# NaN from undefined operations
cat('0/0 =', 0/0, '
') # NaN
cat('sqrt(-1) =', sqrt(-1), '
') # NaN (with warning)
cat('Inf - Inf =', Inf - Inf, '
') # NaN
# NaN IS also NA (a special case)
cat('is.nan(NaN):', is.nan(NaN), '
')
cat('is.na(NaN): ', is.na(NaN), '
') # TRUE!
cat('is.nan(NA): ', is.nan(NA), '
') # FALSENA rispetto a Inf
Inf e -Inf rappresentano l'infinito positivo e negativo: sono il risultato di operazioni come 1/0. A differenza di NA, Inf è un valore numerico noto, anche se estremo, e partecipa normalmente ai confronti.
cat('1/0 =', 1/0, '
') # Inf
cat('-1/0 =', -1/0, '
') # -Inf
cat('Inf + 1 =', Inf + 1, '
') # Inf
cat('Inf > 1000:', Inf > 1000, '
') # TRUE
cat('is.infinite(Inf):', is.infinite(Inf), '
')
cat('is.na(Inf): ', is.na(Inf), '
') # FALSEPropagazione di NA nelle operazioni aritmetiche
NA è contagioso nelle operazioni aritmetiche: qualsiasi operazione che coinvolga NA restituisce NA. Questo comportamento è intenzionale: se un valore in un calcolo è sconosciuto, anche il risultato è sconosciuto.
x <- NA
cat('NA + 5: ', x + 5, '
') # NA
cat('NA * 0: ', x * 0, '
') # NA (not 0!)
cat('NA == NA:', x == NA, '
') # NA (not TRUE!)
cat('NA > 5: ', x > 5, '
') # NA
cat('sum(1,NA):', sum(1, NA), '
') # NAtypeof(NA) — NA tipizzati
Per impostazione predefinita, NA è di tipo logical. R fornisce varianti tipizzate di NA per ogni tipo atomico. Sono importanti quando si lavora con vettori tipizzati, per evitare conversioni di tipo indesiderate.
cat('typeof(NA): ', typeof(NA), '
') # logical
cat('typeof(NA_integer_): ', typeof(NA_integer_), '
') # integer
cat('typeof(NA_real_): ', typeof(NA_real_), '
') # double
cat('typeof(NA_complex_): ', typeof(NA_complex_), '
') # complex
cat('typeof(NA_character_):', typeof(NA_character_), '
') # characterNA_integer_ nella pratica
Quando crea un vettore intero con un valore mancante, utilizzi NA_integer_ per mantenere il tipo del vettore. In alcuni contesti, l'uso del semplice NA provoca una conversione implicita a double.
# Using plain NA in an integer vector
v1 <- c(1L, 2L, NA, 4L)
cat('typeof with NA: ', typeof(v1), '
') # integer (OK here)
# Explicit typed NA is safer in functions
v2 <- c(1L, 2L, NA_integer_, 4L)
cat('typeof with NA_integer_:', typeof(v2), '
') # integer
# Check they behave the same
cat('Same?', identical(v1, v2), '
')NA_real_ e NA_character_
NA_real_ si usa per i valori mancanti nei vettori double (numerici), mentre NA_character_ si usa per le stringhe mancanti. Sono particolarmente importanti quando si costruiscono vettori all'interno di funzioni, dove la coerenza del tipo è fondamentale.
# Character vector with missing
names_vec <- c('Alice', 'Bob', NA_character_, 'Dave')
cat('Names:', names_vec, '
')
cat('typeof:', typeof(names_vec), '
')
# Numeric with missing
readings <- c(22.5, NA_real_, 21.3, NA_real_, 24.1)
cat('Readings:', readings, '
')
cat('Non-NA count:', sum(!is.na(readings)), '
')NA nelle operazioni logiche
La presenza di NA nelle operazioni logiche segue la logica a tre valori: TRUE | NA è TRUE (perché TRUE OR qualsiasi valore è TRUE), mentre FALSE | NA è NA (non possiamo determinare il risultato senza conoscere il valore di NA).
cat('TRUE | NA:', TRUE | NA, '
') # TRUE
cat('FALSE | NA:', FALSE | NA, '
') # NA
cat('TRUE & NA:', TRUE & NA, '
') # NA
cat('FALSE & NA:', FALSE & NA, '
') # FALSE
# Never use == to test for NA!
cat('NA == NA:', NA == NA, '
') # NA (not TRUE!)
cat('is.na(NA):', is.na(NA), '
') # TRUE (correct way)NA nei vettori e nei data frame
I valori mancanti compaiono frequentemente nei dati reali. Comprendere il comportamento di NA aiuta a interpretare correttamente i riepiloghi, individuare i problemi di qualità dei dati e scegliere la strategia di gestione più adatta.
ages <- c(25, NA, 32, NA, 29, 41, NA, 35)
cat('Ages:', ages, '
')
cat('Length:', length(ages), '
')
cat('Missing count:', sum(is.na(ages)), '
')
cat('Present count:', sum(!is.na(ages)), '
')
cat('Mean (fails):', mean(ages), '
') # NA
cat('Mean (works):', mean(ages, na.rm = TRUE), '
') # 32.4Tipi di NA: quadro completo
Ecco un riepilogo dei valori speciali correlati a NA in R:
NA— valore mancante generico (tipo logical)NA_integer_,NA_real_,NA_complex_,NA_character_— NA tipizzatiNaN— numero non definito (risultato di 0/0, sqrt(-1))Inf,-Inf— valori infiniti (risultato di 1/0)NULL— assenza di un oggetto (lunghezza 0)
# Test functions for special values
x <- c(1, NA, NaN, Inf, -Inf, 0)
cat('Values: ', x, '
')
cat('is.na(): ', is.na(x), '
') # TRUE for NA and NaN
cat('is.nan(): ', is.nan(x), '
') # TRUE only for NaN
cat('is.infinite(): ', is.infinite(x), '
') # TRUE for Inf and -Inf
cat('is.finite(): ', is.finite(x), '
') # TRUE only for normal numbersVerifica rapida
A quale valore corrisponde NA == NA in R?
Riepilogo: comprendere NA
Ottimo! Ecco i concetti principali di questa lezione:
NA= valore mancante (si sa che esiste, ma il suo valore è sconosciuto)NULL= assenza di un oggetto (viene escluso dai vettori)NaN= risultato aritmetico non definito (è anche NA)Inf/-Inf= valori infiniti (NON sono NA)- NA è contagioso nelle operazioni aritmetiche: le operazioni su NA restituiscono NA
- Utilizzi NA tipizzati (
NA_integer_, ecc.) per scrivere codice sicuro rispetto ai tipi - Verifichi sempre la presenza di NA con
is.na(), mai con== NA
# Key tests side by side
special_vals <- list(NA=NA, NaN=NaN, Inf=Inf, 'NULL-in-vec'=c(1,NULL,3)[2])
for (name in names(special_vals)) {
v <- special_vals[[name]]
cat(name, '| is.na:', is.na(v), '| is.nan:', is.nan(v[!is.infinite(v)]), '
')
}Impara R con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 43
- Lezioni
- 159
Domande Frequenti
La lezione «Comprendere NA in R» è gratuita?
Sì — il testo completo di «Comprendere NA in R» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso R Academy, passa a CoddyKit PRO. Il corso R Academy include 4 lezioni in totale.
Cosa imparerò in «Comprendere NA in R»?
Impari cosa significa NA, perché si propaga e in cosa differisce da NULL. Eserciti R Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare R Academy?
Non è richiesta alcuna esperienza precedente. R Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Comprendere NA in R»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione R Academy?
Sì. Ogni lezione R Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Comprendere NA in R
- Rilevamento e conteggio dei valori mancanti
- Rimozione e sostituzione dei valori NA
- NA nei calcoli e nelle aggregazioni