Typy danych w R z przykładem
⚡ Inteligentne podsumowanie
Typy danych w R definiują sposób przechowywania wartości w pamięci, a operatory decydują o tym, co R może z nimi zrobić. W tym artykule omówiono wektory, zmienne, operatory arytmetyczne, relacyjne, logiczne i przypisania wraz z przykładami do uruchomienia.

Jakie są typy danych w R?
Poniżej przedstawiono typy danych i struktury danych w programowaniu R:
- Skalary
- Wektory (numeryczne, znakowe, logiczne)
- Matryce
- Ramki danych
- wykazy
Ta lista łączy dwa powiązane ze sobą pomysły, a ich rozdzielenie ułatwia zrozumienie reszty tej strony. typ danych opisuje, czym jest pojedyncza wartość — liczbą, fragmentem tekstu, PRAWDĄ lub FAŁSZEM. struktura danych Opisuje, ile wartości jest przechowywanych razem i jaki mają kształt. Skalary, wektory, macierze, ramki danych i listy to struktury; wartości w nich zawarte nadal należą do jednego z podstawowych typów R.
| Structure | Wymiary | Czy dopuszczalne są typy mieszane? | Typowe zastosowanie |
|---|---|---|---|
| Skalarny | Wektor o długości 1 | Nie | Pojedynczy pomiar lub flaga |
| wektor | 1 | Nie | Kolumna odczytów jednego typu |
| Matrix | 2 | Nie | Siatki numeryczne i algebra liniowa |
| Ramka danych | 2 | Tak, jeden typ na kolumnę | Zestawy danych tabelarycznych |
| Lista | 1, ale gniazdowalne | Tak, cokolwiek na element | Wyniki modelu i mieszane kontenery |
R nie ma oddzielnego typu skalarnego: skalar to po prostu wektor o długości jeden, dlatego tak dużo kodu R jest pisane dla całych wektorów na raz.
Podstawowe typy danych w R
Każda wartość w R należy do jednego z małego zestawu podstawowych (atomowych) typów:
- 4.5 jest wartością dziesiętną zwaną liczbą.
- 4 wygląda jak liczba całkowita, ale R nadal przechowuje ją jako liczbę zmiennoprzecinkową. Wpisz 4L, gdy wymagana jest prawdziwa liczba całkowita.
- PRAWDA lub FAŁSZ to wartość logiczna, nazywana w języku R wartością logiczną.
- Wartość wewnątrz „” lub „” to tekst (ciąg znaków). Te wartości nazywane są znakami.
Dwa kolejne typy uzupełniają zestaw. Wartości zespolone, takie jak 3+2i, zawierają część rzeczywistą i urojoną, a wartości surowe zawierają bajty. Oba typy rzadko pojawiają się w codziennej analizie, ale są wymienione w bazie R. dokumentacja typeof() obok czterech powszechnych typów.
| Typ | Przykładowa wartość | class() zwraca | typeof() zwraca |
|---|---|---|---|
| logiczny | TRUE | logiczny | logiczny |
| Liczba całkowita | 4L | liczba całkowita | liczba całkowita |
| Double (numeryczny) | 4.5 | numeryczna | Podwójna |
| Postać | „R jest fantastyczne” | charakter | charakter |
| Kompleks | 3+2i | kompleks | kompleks |
| Surowy | jako.surowy(10) | surowy | surowy |
Typ zmiennej możemy sprawdzić za pomocą funkcji klasy.
Przykład 1: Sprawdź zmienną liczbową
# Declare variables of different types # Numeric x <- 28 class(x)
Wyjście:
## [1] "numeric"
Przykład 2: Sprawdź zmienną znakową
# String y <- "R is Fantastic" class(y)
Wyjście:
## [1] "character"
Przykład 3: Sprawdź zmienną logiczną
# Boolean z <- TRUE class(z)
Wyjście:
## [1] "logical"
Zauważ, że class() odpowiada „numeric” dla 28, mimo że 28 nie ma części dziesiętnej. R zapisał to jako wartość typu double i tylko typeof() to ujawnia. Kolejną różnicą wartą poznania jest sposób, w jaki te wartości otrzymują nazwy.
Zmienne w R
Zmienne są jednym z podstawowych elementów składowych języka R, które przechowują wartości i mają znaczenie dla każdego, kto zajmuje się analizą danych. Zmienna w R może przechowywać liczbę, obiekt, wynik statystyczny, wektor, zbiór danych lub prognozę modelu – w zasadzie wszystko, co generuje R. Możemy później użyć tej zmiennej, po prostu wywołując jej nazwę.
Aby zadeklarować zmienną w R, musimy nadać jej nazwę. Nazwa nie może zawierać spacji. Do łączenia dwóch słów możemy użyć _.
Nazwy mogą zawierać litery, cyfry, kropki i znaki podkreślenia, ale muszą zaczynać się od litery lub kropki. Słowa kluczowe, takie jak TRUE, FALSE i NULL, nie mogą być używane jako nazwy. Aby dodać wartość do zmiennej, użyj <- lub =.
Oto składnia:
# First way to declare a variable: use the `<-` name_of_variable <- value # Second way to declare a variable: use the `=` name_of_variable = value
W wierszu poleceń możemy wpisać następujące kody, aby zobaczyć, co się stanie:
Przykład 1: Przypisz wartość i wydrukuj ją
# Print variable x
x <- 42
x
Wyjście:
## [1] 42
Przykład 2: Deklarowanie drugiej zmiennej
y <- 10 y
Wyjście:
## [1] 10
Przykład 3: Użycie dwóch zmiennych w jednym wyrażeniu
# We call x and y and apply a subtraction
x-y
Wyjście:
## [1] 32
Zmienna przechowująca kilka wartości tego samego typu jest wektorem, a jest to struktura, której oczekuje niemal każda funkcja języka R.
Wektory w R
Wektor to jednowymiarowa kolekcja, w której każdy element ma ten sam typ. Możemy utworzyć wektor ze wszystkimi podstawowymi typami danych R, których nauczyliśmy się wcześniej. Najprostszym sposobem utworzenia wektora w R jest użycie funkcji c().
Przykład 1: Utwórz wektor numeryczny
# Numerical
vec_num <- c(1, 10, 49)
vec_num
Wyjście:
## [1] 1 10 49
Przykład 2: Utwórz wektor znaków
# Character vec_chr <- c("a", "b", "c") vec_chr
Wyjście:
## [1] "a" "b" "c"
Przykład 3: Utwórz wektor logiczny
# Boolean vec_bool <- c(TRUE, FALSE, TRUE) vec_bool
Wyjście:
##[1] TRUE FALSE TRUE
Jeśli c() otrzyma mieszankę typów, nie zawodzi. Po cichu wymusza każdy element aż do najogólniejszego z dostępnych typów, więc c(1, "a", TRUE) staje się wektorem znaków. W R możemy również wykonywać obliczenia arytmetyczne na wektorach.
Przykład 4: Dodawanie dwóch wektorów element po elemencie
# Create the vectors vect_1 <- c(1, 3, 5) vect_2 <- c(2, 4, 6) # Take the sum of A_vector and B_vector sum_vect <- vect_1 + vect_2 # Print out total_vector sum_vect
Wyjście:
[1] 3 7 11
Dodawanie działało element po elemencie, ponieważ oba wektory mają tę samą długość. Gdy długości się różnią, R przetwarza krótszy wektor, powtarzając go, aż będzie pasował do dłuższego, i ostrzega tylko wtedy, gdy dłuższa długość nie jest wielokrotnością krótszej.
Przykład 5: Pokrój pierwsze pięć elementów
W R możliwe jest pocięcie wektora. Czasami interesuje nas tylko pierwszych pięć elementów wektora. Możemy użyć polecenia [1:5], aby np.tracwartości od 1 do 5.
# Slice the first five rows of the vector
slice_vector <- c(1,2,3,4,5,6,7,8,9,10)
slice_vector[1:5]
Wyjście:
## [1] 1 2 3 4 5
Przykład 6: Tworzenie zakresu za pomocą dwukropka OperaTor
Najkrótszym sposobem utworzenia zakresu wartości jest użycie operatora dwukropka (:) między dwiema liczbami. Na przykład, korzystając z powyższego przykładu, możemy napisać c(1:10), aby utworzyć wektor wartości od jednego do dziesięciu.
# Faster way to create adjacent values
c(1:10)
Wyjście:
## [1] 1 2 3 4 5 6 7 8 9 10
Ponieważ wektor bezgłośnie zmienia typ podczas mieszania, warto wiedzieć, jak sprawdzać i konwertować typy na żądanie.
Jak sprawdzać i konwertować typy danych w R
Trzy rodziny funkcji odpowiadają na trzy stale pojawiające się pytania: czym jest to, czy to jest dany typ i czy to może stać się innym typem.
| Rodzina funkcji | Pytanie, na które odpowiada | Przykłady |
|---|---|---|
| klasa(), typeof(), tryb() | Jakiego typu jest ta wartość? | klasa(28), typ(28), tryb(28) |
| Jest.*() | Czy ta wartość jest typu X? | jest.numeric(), jest.character(), jest.logical() |
| Jak.*() | Czy ta wartość może stać się typem X? | jako.numeric(), jako.character(), jako.integer() |
| str () | Jak wygląda ten obiekt w całości? | str(vec_num) |
# Three different views of the same value x <- 28 class(x) # "numeric" -- the class used for method dispatch typeof(x) # "double" -- how R stores the value internally mode(x) # "numeric" -- the older S-style mode # Ask a yes/no question about a type is.numeric(x) # TRUE is.character(x) # FALSE # Convert between types as.character(x) # "28" as.integer("28") # 28 stored as an integer as.numeric("abc") # NA, with a coercion warning
Dwie reguły wyjaśniają większość niespodzianek. Po pierwsze, class() raportuje klasę użytą do wywołania metody, podczas gdy typeof() raportuje pamięć wewnętrzną, dlatego 28 jest „numeric” dla jednego i „double” dla drugiego. Po drugie, konwersja, która się nie powiedzie, nie zatrzymuje skryptu: as.numeric("abc") zwraca NA i wyświetla ostrzeżenie o wymuszeniu, więc ciche NA po imporcie prawie zawsze stanowią problem z typem. Ta sama logika napędza Czynniki, w których kategorie są przechowywane jako kody całkowite oraz tabela poziomów.
Po ustaleniu typów nadszedł czas na operatory, które na nich działają.
R Arytmetyka Operatorsy
Najpierw przyjrzymy się podstawowym operatorom arytmetycznym w R. Poniżej przedstawiono operatory arytmetyczne w programowaniu R i ich znaczenie:
| OperaTor | OPIS |
|---|---|
| + | Dodatek |
| - | Podłożetraccja |
| * | Mnożenie |
| / | podział |
| ^ lub ** | Potęgowanie |
| %% | Modulo (reszta po dzieleniu) |
| %/% | Dzielenie całkowite (iloraz, reszta odrzucona) |
Każdy z tych operatorów jest wektorowy, co oznacza, że to samo wyrażenie działa zarówno na pojedynczej wartości, jak i na całej kolumnie.
Przykład 1: Dodawanie
# An addition
3 + 4
Wyjście:
## [1] 7
Powyższy kod R można łatwo skopiować i wkleić do RStudio Konsola. W tym artykule wynik jest wyświetlany w wierszach rozpoczynających się znakiem ##. Na przykład, jeśli napiszemy kod print("Guru99") konsola drukuje [1] "Guru99", co na tej stronie byłoby pokazane jako ## [1] "Guru99 ”.
Znak ## oznacza wiersz wydruku, a liczba w nawiasie kwadratowym ([1]) jest indeksem pierwszej wartości w tym wierszu, a nie częścią wyniku.
Zdania zaczynające się od # to komentarze. Możemy użyć # w skrypcie R, aby dodać dowolną notatkę, a R zignoruje ją w czasie wykonywania.
Przykład 2: Mnożenie
# A multiplication
3*5
Wyjście:
## [1] 15
Przykład 3: Dzielenie
# A division
(5+5)/2
Wyjście:
## [1] 5
Przykład 4: Potęgowanie
# Exponentiation
2^5
Wyjście:
## [1] 32
Przykład 5: Modulo
# Modulo
28%%6
Wyjście:
## [1] 4
Arytmetyka generuje liczby. Następna grupa operatorów generuje zamiast nich wartości PRAWDA i FAŁSZ.
R Relacyjny (Porównanie) Operatorsy
Operatory relacyjne porównują dwie wartości i zwracają wynik logiczny. Są to operatory, które budują warunki używane do filtrowania i są wektoryzowane dokładnie tak samo jak operatory arytmetyczne.
| OperaTor | OPIS |
|---|---|
| > | Lepszy niż |
| < | Less niż |
| >= | Większe bądź równe |
| <= | Less niż lub równy |
| == | Dokładnie równy |
| != | Nie równa się |
a <- 10 b <- 3 a > b # TRUE a < b # FALSE a >= 10 # TRUE a <= 3 # FALSE a == b # FALSE a != b # TRUE # Relational operators are vectorised scores <- c(45, 78, 90, 62) scores >= 60 # FALSE TRUE TRUE TRUE
Dwa nawyki oszczędzają tu czas. Używaj == do porównania i <- do przypisania, ponieważ pojedynczy = w warunku to częsty błąd początkujących. Unikaj też == w liczbach zmiennoprzecinkowych: zaokrąglanie zmiennoprzecinkowe oznacza, że 0.1 + 0.2 == 0.3 to FAŁSZ, więc isTRUE(all.equal(0.1 + 0.2, 0.3)) jest bezpiecznym testem. Porównania na posortowane ramki danych Postępuj zgodnie z tymi samymi zasadami.
R Logiczne Operatorsy
Za pomocą operatorów logicznych chcemy zwracać wartości wewnątrz wektora na podstawie warunków logicznych. Poniższa tabela zawiera listę operatorów logicznych dostępnych w R.
Instrukcje logiczne w R są umieszczane w nawiasach []. Możemy dodać dowolną liczbę instrukcji warunkowych, ale musimy je umieścić w nawiasach. Aby utworzyć instrukcję warunkową, możemy zastosować następującą strukturę:
variable_name[(conditional_statement)]
Zmienna nazwa_zmiennej odnosi się do zmiennej, której chcemy użyć w poleceniu, więc tworzymy polecenie logiczne, na przykład nazwa_zmiennej > 0. Na koniec używamy nawiasów kwadratowych, aby zakończyć polecenie logiczne. Poniżej znajduje się przykład polecenia logicznego.
Przykład 1: Porównanie każdego elementu wektora
# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5
Wyjście:
## [1]FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
W powyższym wyniku R odczytuje każdą wartość i porównuje ją ze stwierdzeniem logical_vector>5. Jeśli wartość jest ściśle większa od pięciu, warunek jest PRAWDA, w przeciwnym razie FAŁSZ. R zwraca wektor PRAWDA i FAŁSZ.
Przykład 2: Zachowaj tylko pasujące elementy
W poniższym przykładzie chcemy wyeksportowaćtracTylko wartości spełniające warunek „jest ściśle większe od pięciu” można umieścić w nawiasach kwadratowych, poprzedzając je wektorem zawierającym wartości.
# Print value strictly above 5
logical_vector[(logical_vector>5)]
Wyjście:
## [1] 6 7 8 9 10
Przykład 3: Połącz dwa warunki
# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]
Wyjście:
## [1] 5 6
W przykładzie 3 celowo użyto pojedynczego znaku ampersand &. Operatory jednoznakowe & i | porównują wektory element po elemencie i zwracają wektor, co jest niezbędne do tworzenia podzbiorów. Formy podwójne && i || zwracają jedną wartość i należą do warunków if() i while(). Ponieważ R 4.3.0Przekazanie argumentu dłuższego niż jeden element do && lub || jest błędem, a nie ostrzeżeniem, więc te dwie rodziny nie są już zamienne. Operator ! neguje warunek, a xor() daje wyłączne OR.
Zadanie R Operatorsy
Operatory przypisania wiążą wartość z nazwą. R oferuje ich więcej niż większość języków, a różnice mają znaczenie, gdy kod zostanie przeniesiony do Funkcje.
| OperaTor | OPIS |
|---|---|
| <- | Zadanie lewe, wybór idiomatyczny w R |
| = | Przypisanie lewe, ale zwykle zarezerwowane dla argumentów funkcji |
| -> | Prawidłowe przypisanie, ważne, ale rzadko używane |
| <<- | Superprzypisanie przeszukujące otaczające środowiska |
| - >> | Prawe superprzypisanie |
# Left assignment -- the idiomatic form count <- 5 # Equals sign: works, but reserve it for function arguments count = 5 round(3.14159, digits = 2) # Right assignment 5 -> count # Superassignment, used inside functions to reach an outer scope count <<- 5
Przewodniki stylistyczne zalecają użycie <- do tworzenia obiektów i = do nazywania argumentów w wywołaniu, ponieważ wtedy te dwie role pozostają wizualnie odrębne. Używaj <<- oszczędnie: zmienia on obiekt poza bieżącą funkcją i utrudnia logiczne interpretowanie kodu. Gdy przypisanie i typy będą już znane, kolejne kroki to: importowanie rzeczywistych danych i reshaping to z dplyr; Przegląd języka R umieszcza cały łańcuch narzędzi w odpowiednim kontekście.

