Przegląd systemu typów R
Poznaj typy double, integer, character, logical i complex.
Przegląd systemu typó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.
System typów R
R ma rozbudowany system typów. Każdy obiekt ma klasę (kategorię wysokiego poziomu) oraz typ (niskopoziomowy tryb przechowywania). Zrozumienie obu tych pojęć pomaga pisać poprawny i wydajny kod oraz diagnozować błędy związane z typami.
# Check class and type of various objects
cat('class(42L) :', class(42L), '
')
cat('typeof(42L) :', typeof(42L), '
')
cat('class(3.14) :', class(3.14), '
')
cat('typeof(3.14) :', typeof(3.14), '
')
cat('class(TRUE) :', class(TRUE), '
')
cat('class("hello"):', class('hello'), '
')class() a typeof()
class(x) zwraca kategorię wysokiego poziomu używaną przez obiektowy system R (np. 'integer', 'numeric', 'matrix'). typeof(x) zwraca niskopoziomowy typ przechowywania w C (np. 'integer', 'double', 'closure').
m <- matrix(1:4, nrow = 2)
cat('class(matrix) :', class(m), '
') # matrix array
cat('typeof(matrix) :', typeof(m), '
') # integer
f <- factor(c('a', 'b', 'a'))
cat('class(factor) :', class(f), '
') # factor
cat('typeof(factor) :', typeof(f), '
') # integer (stored as int!)
cat('class(list) :', class(list()), '
') # list
cat('typeof(list) :', typeof(list()), '
') # listis.numeric() — sprawdzanie typu numerycznego
is.numeric(x) zwraca TRUE zarówno dla wartości typu integer, jak i double (oraz dla macierzy numerycznych). Sprawdza nadtyp numeryczny, a nie konkretny tryb przechowywania.
cat('is.numeric(3.14):', is.numeric(3.14), '
') # TRUE (double)
cat('is.numeric(3L): ', is.numeric(3L), '
') # TRUE (integer)
cat('is.numeric(TRUE):', is.numeric(TRUE), '
') # FALSE
cat('is.numeric("3"): ', is.numeric('3'), '
') # FALSE
cat('is.numeric(NA): ', is.numeric(NA), '
') # FALSE (NA is logical)is.integer() a is.double()
is.integer() sprawdza konkretnie przechowywanie całkowitoliczbowe (utworzone przy użyciu sufiksu L lub funkcji as.integer()). is.double() sprawdza przechowywanie zmiennoprzecinkowe typu double. Oba typy są podtypami typu numerycznego.
x_int <- 5L
x_dbl <- 5.0
cat('--- x_int = 5L ---
')
cat('is.integer:', is.integer(x_int), '
') # TRUE
cat('is.double: ', is.double(x_int), '
') # FALSE
cat('is.numeric:', is.numeric(x_int), '
') # TRUE
cat('--- x_dbl = 5.0 ---
')
cat('is.integer:', is.integer(x_dbl), '
') # FALSE
cat('is.double: ', is.double(x_dbl), '
') # TRUE
cat('is.numeric:', is.numeric(x_dbl), '
') # TRUEis.character() — sprawdzanie ciągu znaków
is.character(x) zwraca TRUE, jeśli x jest wektorem znakowym (ciągiem znaków). Tej funkcji można użyć do sprawdzania danych wejściowych, które powinny być tekstem, lub do rozróżniania numerycznych i znakowych typów NA.
greetings <- c('hello', 'world', 'R')
numbers <- c(1, 2, 3)
numeric_string <- '42'
cat('is.character(greetings): ', is.character(greetings), '
')
cat('is.character(numbers): ', is.character(numbers), '
')
cat('is.character(numeric_string): ', is.character(numeric_string), '
')
cat('is.character(NA_character_): ', is.character(NA_character_), '
')is.logical() — sprawdzanie wartości logicznych
is.logical(x) zwraca TRUE, jeśli x zawiera wartości logiczne (Boolean). Należy pamiętać, że nieokreślone typowo NA jest domyślnie wartością logiczną.
flags <- c(TRUE, FALSE, TRUE, NA)
cat('is.logical(flags): ', is.logical(flags), '
') # TRUE
cat('is.logical(NA): ', is.logical(NA), '
') # TRUE (default NA is logical)
cat('is.logical(1): ', is.logical(1), '
') # FALSE
cat('is.logical("TRUE"):', is.logical('TRUE'), '
') # FALSE
cat('typeof(NA): ', typeof(NA), '
') # logicalHierarchia typów R
Typy atomowe R tworzą hierarchię od najprostszego do najbardziej złożonego: logical < integer < double < complex < character. Podczas łączenia typów w wektorze R konwertuje wszystkie elementy do najbardziej złożonego obecnego typu.
# Type hierarchy in action
cat('c(TRUE, 1L) type: ', typeof(c(TRUE, 1L)), '
') # integer
cat('c(1L, 1.5) type: ', typeof(c(1L, 1.5)), '
') # double
cat('c(1.5, 1+0i) type: ', typeof(c(1.5, 1+0i)), '
') # complex
cat('c(1+0i, "a") type: ', typeof(c(1+0i, 'a')), '
') # character
cat('c(TRUE, "x") type: ', typeof(c(TRUE, 'x')), '
') # characterProgramowe sprawdzanie typów
Można napisać funkcje sprawdzające typy, aby przeprowadzić audyt listy obiektów. Połączenie funkcji class(), typeof() i length() daje kompleksowe podsumowanie struktury dowolnego obiektu.
describe_type <- function(x, label) {
cat(label, ': class =', class(x), ', typeof =', typeof(x),
', length =', length(x), '
')
}
describe_type(42L, 'integer literal')
describe_type(3.14, 'double literal')
describe_type(TRUE, 'logical')
describe_type('hello', 'character')
describe_type(c(1,2,3), 'numeric vector')
describe_type(list(1,'a'), 'list')storage.mode() i mode()
storage.mode(x) jest podobne do typeof(x), ale używa konwencji nazewniczej S3 (np. zwraca 'double' zamiast 'double'). mode(x) zwraca nieco bardziej ogólną kategorię, łączącą typy integer i double jako 'numeric'.
x_int <- 5L
x_dbl <- 5.0
cat('mode(5L): ', mode(x_int), '
') # numeric
cat('mode(5.0): ', mode(x_dbl), '
') # numeric
cat('storage.mode(5L): ', storage.mode(x_int), '
') # integer
cat('storage.mode(5.0):', storage.mode(x_dbl), '
') # double
# mode() lumps int+dbl; storage.mode() / typeof() distinguish themSprawdzanie typów list i ramek danych
W przypadku bardziej złożonych obiektów, takich jak listy i ramki danych, sapply(df, class) stosuje funkcję class() do każdej kolumny, zwracając nazwany wektor typów kolumn — to szybki sposób na sprawdzenie schematu ramki danych.
df <- data.frame(
id = 1:3,
name = c('Alice', 'Bob', 'Carol'),
score = c(88.5, 79.0, 92.3),
passed = c(TRUE, TRUE, TRUE)
)
cat('Column types:
')
print(sapply(df, class))
cat('Column typeof:
')
print(sapply(df, typeof))Podsumowanie systemu typów
Oto krótki przewodnik po narzędziach R do sprawdzania typów:
class(x)— nazwa klasy S3 wysokiego poziomutypeof(x)— niskopoziomowy typ przechowywania w Cis.numeric(x)— TRUE dla typu integer lub doubleis.integer(x)— TRUE wyłącznie dla przechowywania typu integeris.double(x)— TRUE wyłącznie dla typu double (zmiennoprzecinkowego)is.character(x)— TRUE dla ciągów znakówis.logical(x)— TRUE dla TRUE/FALSE/NA
x <- 42L
cat('class(42L): ', class(x), '
')
cat('typeof(42L): ', typeof(x), '
')
cat('is.numeric(42L): ', is.numeric(x), '
')
cat('is.integer(42L): ', is.integer(x), '
')
cat('is.double(42L): ', is.double(x), '
')
cat('is.character(42L):', is.character(x), '
')Szybkie sprawdzenie
Co zwraca w R wyrażenie is.numeric(5L)?
Podsumowanie: system typów R
Świetna praca! Najważniejsze wnioski z tej lekcji:
class(x)zwraca typ wysokiego poziomu, atypeof(x)niskopoziomowy typ przechowywaniais.numeric()zwraca TRUE zarówno dla liczb całkowitych, jak i typu doubleis.integer()iis.double()rozróżniają oba podtypy numeryczne- Hierarchia typów R (od niskiego do wysokiego): logical → integer → double → complex → character
- Łączenie typów w wektorze uruchamia automatyczną konwersję do typu najwyższego poziomu
sapply(df, class)sprawdza wszystkie typy kolumn w ramce danych
# Type audit function
audit_types <- function(x, name = 'x') {
cat(name, ': class=', class(x), ', typeof=', typeof(x),
', is.numeric=', is.numeric(x), '
')
}
audit_types(1L, 'integer')
audit_types(1.0, 'double')
audit_types(TRUE, 'logical')
audit_types('hello', 'character')
audit_types(1+2i, 'complex')Często zadawane pytania
Czy lekcja „Przegląd systemu typów R” jest bezpłatna?
Tak — pełny tekst „Przegląd systemu typó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 „Przegląd systemu typów R”?
Poznaj typy double, integer, character, logical i complex. Ć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 „Przegląd systemu typó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
- Przegląd systemu typów R
- Konwersja między typami liczbowymi
- Konwersja typów logicznych i znakowych
- Pułapki konwersji typów i dobre praktyki