Zrozumienie NA w R
Dowiedz się, co oznacza NA, dlaczego jest propagowane i czym różni się od NULL.
Zrozumienie NA w R to bezpłatna lekcja R Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.
Czym jest NA w języku R?
NA oznacza Not Available — reprezentuje brakującą lub nieznaną wartość. W przeciwieństwie do NULL (brak obiektu) lub NaN (nie jest liczbą), NA jest symbolem zastępczym danych, które istnieją, ale są nieznane.
# 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 a NULL
NA to brakująca wartość wewnątrz wektora — miejsce istnieje, ale nie ma znanej wartości. NULL oznacza całkowity brak obiektu — ma długość 0 i nie można przechowywać go wewnątrz wektora.
# 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 a NaN
NaN (Not a Number) jest wynikiem matematycznie niezdefiniowanych operacji, takich jak 0/0 lub sqrt(-1). Jest specjalną wartością numeryczną, podczas gdy NA to ogólny znacznik brakującej wartości, który może dotyczyć dowolnego typu.
# 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 a Inf
Inf i -Inf oznaczają odpowiednio dodatnią i ujemną nieskończoność — powstają w wyniku operacji takich jak 1/0. W przeciwieństwie do NA, Inf jest znaną (choć skrajną) wartością liczbową i standardowo uczestniczy w porównaniach.
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), '
') # FALSEPropagacja NA w działaniach arytmetycznych
NA jest zaraźliwe w działaniach arytmetycznych: każda operacja obejmująca NA zwraca NA. Jest to zamierzone — jeśli jedna wartość w obliczeniu jest nieznana, wynik również jest nieznany.
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) — typowane wartości NA
Domyślna wartość NA ma typ logical. R udostępnia typowane warianty NA dla każdego typu atomowego. Są one ważne podczas pracy z wektorami o określonym typie, ponieważ pozwalają uniknąć niezamierzonej konwersji typów.
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_ w praktyce
Podczas tworzenia wektora typu integer zawierającego brakującą wartość należy użyć NA_integer_, aby zachować właściwy typ wektora. Użycie zwykłego NA w niektórych kontekstach powoduje niejawną konwersję do typu 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_ i NA_character_
NA_real_ służy do oznaczania brakujących wartości w wektorach typu double (numeric), a NA_character_ — brakujących ciągów znaków. Są one szczególnie ważne podczas tworzenia wektorów wewnątrz funkcji, gdzie istotna jest spójność typów.
# 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 w operacjach logicznych
W operacjach logicznych NA podlega logice trójwartościowej: TRUE | NA daje TRUE (ponieważ TRUE OR dowolna wartość daje TRUE), natomiast FALSE | NA daje NA (bez znajomości wartości NA nie możemy określić wyniku).
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 w wektorach i ramkach danych
Brakujące wartości często występują w rzeczywistych danych. Zrozumienie zachowania NA pomaga poprawnie interpretować podsumowania, wykrywać problemy z jakością danych i wybierać właściwą strategię postępowania.
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.4Typy NA: pełny obraz
Poniżej znajduje się podsumowanie specjalnych wartości związanych z NA w języku R:
NA— ogólna brakująca wartość (typ logiczny)NA_integer_,NA_real_,NA_complex_,NA_character_— typowane wartości NANaN— niezdefiniowana liczba (wynik0/0,sqrt(-1))Inf,-Inf— wartości nieskończone (wynik1/0)NULL— brak obiektu (długość 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 numbersSzybkie sprawdzenie
Jaki wynik w języku R daje wyrażenie NA == NA?
Podsumowanie: zrozumienie NA
Doskonale! Najważniejsze informacje z tej lekcji:
NA= brakująca wartość (wiadomo, że istnieje, ale jej wartość jest nieznana)NULL= brak obiektu (jest usuwany z wektorów)NaN= niezdefiniowany wynik arytmetyczny (jest również wartością NA)Inf/-Inf= wartości nieskończone (NIE są wartościami NA)- NA jest zaraźliwe w działaniach arytmetycznych — operacje na NA zwracają NA
- Należy używać typowanych wartości NA (
NA_integer_itd.), aby zapewnić bezpieczeństwo typów - NA należy zawsze sprawdzać za pomocą
is.na(), nigdy za pomocą== 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)]), '
')
}Ucz się R dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 43
- Lekcje
- 159
Często zadawane pytania
Czy lekcja „Zrozumienie NA w R” jest bezpłatna?
Tak — pełny tekst „Zrozumienie NA w R” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zrozumienie NA w R”?
Dowiedz się, co oznacza NA, dlaczego jest propagowane i czym różni się od NULL. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć R Academy?
Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Zrozumienie NA w R”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?
Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Zrozumienie NA w R
- Wykrywanie i zliczanie brakujących wartości
- Usuwanie i zastępowanie wartości NA
- NA w obliczeniach i agregacjach