Operatory przypisania i specjalne
Poznaj >, %in% oraz operator potoku w R.
Operatory przypisania i specjalne to bezpłatna lekcja R Academy na CoddyKit. To lekcja 3 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.
Przypisywanie w R
R oferuje kilka sposobów przypisywania wartości zmiennym. Najbardziej idiomatyczny jest operator <-, który jest preferowanym stylem. Możesz również spotkać = używane do przypisywania, choć w niektórych kontekstach działa ono nieco inaczej.
# Both assign a value, <- is preferred
name <- 'Alice'
age = 30
cat('Name:', name, '
')
cat('Age:', age, '
')Lewa strzałka <- a znak równości =
<- zawsze tworzy zmienną w bieżącym środowisku. = również może służyć do przypisywania, ale wewnątrz wywołań funkcji ustawia nazwane argumenty, zamiast tworzyć zmienną. To rozróżnienie ma znaczenie.
# <- creates a variable outside function calls
x <- 42
# = inside function call sets argument, does NOT create x
mean(x = c(1, 2, 3)) # x is an arg here, not a variable
# But <- inside a function call DOES create a variable
mean(y <- c(1, 2, 3)) # y is now also in workspace
cat('y was created:', y, '
')Operator przypisania w prawo ->
R obsługuje również przypisanie od lewej do prawej za pomocą ->. Przypisuje ono lewą stronę do nazwy znajdującej się po prawej stronie. Choć jest poprawne, w praktyce używa się go rzadko, ponieważ zmniejsza czytelność kodu.
# Right assignment operator
100 -> max_score
'R Programming' -> course_name
cat('Max score:', max_score, '
')
cat('Course:', course_name, '
')
# Same as:
# max_score <- 100
# course_name <- 'R Programming'Przypisanie globalne za pomocą <<-
<<- przypisuje wartość zmiennej w środowisku nadrzędnym (otaczającym), a nie w lokalnym środowisku funkcji. Używa się go wewnątrz funkcji do modyfikowania zmiennej istniejącej poza funkcją.
counter <- 0
increment <- function() {
counter <<- counter + 1 # modifies the global counter
}
increment()
increment()
increment()
cat('Counter after 3 increments:', counter, '
')Operator przynależności %in%
%in% sprawdza, czy każdy element po lewej stronie występuje w wektorze po prawej stronie. Zwraca wektor logiczny o tej samej długości co lewy operand. Jest to najbardziej przejrzysty sposób sprawdzania przynależności do zbioru w R.
fruits <- c('apple', 'banana', 'cherry', 'date', 'elderberry')
# Check membership
cat('Is mango in fruits?', 'mango' %in% fruits, '
')
cat('Is cherry in fruits?', 'cherry' %in% fruits, '
')
# Check multiple values at once
search <- c('banana', 'mango', 'date')
cat('Which are in fruits:', search %in% fruits, '
')Filtrowanie za pomocą %in%
%in% jest szczególnie przydatny podczas filtrowania wektorów lub wierszy ramek danych. Pozwala wybrać elementy należące do zdefiniowanego wcześniej zbioru dozwolonych wartości.
countries <- c('USA', 'UK', 'Canada', 'Germany', 'France', 'Japan')
populations <- c(331, 67, 38, 83, 67, 126) # millions
# Keep only G7 European members
g7_europe <- c('UK', 'Germany', 'France', 'Italy')
mask <- countries %in% g7_europe
cat('G7 Europe countries:', countries[mask], '
')
cat('Populations:', populations[mask], '
')Mnożenie macierzy za pomocą %*%
%*% wykonuje właściwe mnożenie macierzy (iloczyn skalarny), w przeciwieństwie do *, które mnoży element po elemencie. Dla dwóch macierzy A (m x n) i B (n x p) wynikiem jest macierz (m x p).
A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
B <- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)
cat('Matrix A:
')
print(A)
cat('Matrix B:
')
print(B)
cat('A %*% B (matrix mult):
')
print(A %*% B)
cat('A * B (element-wise):
')
print(A * B)Natywny pipe |>
Wprowadzony w R 4.1 natywny pipe |> przekazuje wynik wyrażenia po lewej stronie jako pierwszy argument funkcji po prawej stronie. Dzięki temu łańcuchy operacji są znacznie czytelniejsze.
# Without pipe
result1 <- round(sqrt(abs(-16)), 2)
cat('Without pipe:', result1, '
')
# With native pipe |>
result2 <- -16 |> abs() |> sqrt() |> round(2)
cat('With pipe:', result2, '
')
# Reading left to right: take -16, get abs, sqrt, then roundPipe z wektorami
Natywny pipe |> jest szczególnie przydatny w pracy z wektorami i operacjami numerycznymi. Można łączyć transformacje bez tworzenia zmiennych pośrednich, dzięki czemu kod jest przejrzystszy i łatwiejszy do śledzenia.
scores <- c(88, 45, 92, 61, 73, 55, 84, 79)
# Chain: keep passing scores, then compute mean
passing_mean <- scores |> \(x) x[x >= 60] |> mean()
cat('Mean of passing scores:', round(passing_mean, 2), '
')
# Another chain: sort, reverse, take top 3
top3 <- scores |> sort(decreasing = TRUE) |> head(3)
cat('Top 3 scores:', top3, '
')Niestandardowe operatory infiksowe
R pozwala definiować niestandardowe operatory infiksowe za pomocą składni %name%. W ten sposób pakiety takie jak dplyr definiują pipe %>%. Można tworzyć własne operatory do operacji specyficznych dla danej dziedziny.
# Define a custom infix operator for 'not in'
'%notin%' <- function(x, table) !(x %in% table)
cities <- c('Paris', 'London', 'Berlin', 'Tokyo', 'Sydney')
exclude <- c('Tokyo', 'Sydney')
cat('Cities not in exclude list:', cities[cities %notin% exclude], '
')Skrócona ściąga operatorów
Oto podsumowanie operatorów specjalnych omówionych w tej lekcji:
<-— standardowe przypisanie (zalecane)=— przypisanie (używane również dla argumentów funkcji)<<-— przypisanie w środowisku globalnym/nadrzędnym%in%— sprawdzanie przynależności%*%— mnożenie macierzy|>— natywny pipe (R 4.1+)%name%— składnia niestandardowego operatora infiksowego
# Demonstrate %in% as a filter
all_nums <- 1:20
special <- c(3, 6, 9, 12, 15, 18)
cat('Multiples of 3 up to 20:', all_nums[all_nums %in% special], '
')
# Demonstrate pipe
1:10 |> mean() |> cat('
')Szybkie sprawdzenie
Co zwraca operator %in% użyty jako c(2, 4, 6) %in% c(1, 2, 3)?
Podsumowanie: operatory specjalne
Doskonale! Oto najważniejsze informacje z tej lekcji:
- Do przypisywania używaj
<-— jest to konwencja języka R =działa przy przypisywaniu, ale wewnątrz wywołań funkcji może być niejednoznaczny<<-modyfikuje zmienną w środowisku nadrzędnym (globalnym) z wnętrza funkcji%in%jest najbardziej przejrzystym sposobem sprawdzania przynależności do zbioru w R%*%wykonuje mnożenie macierzy (a nie mnożenie element po elemencie)- Natywny pipe
|>(R 4.1+) łączy wywołania funkcji od lewej do prawej, zapewniając czytelny kod - Niestandardowe operatory są zgodne ze wzorcem
%name%
# Pipe + %in% combined
data <- c(5, 12, 3, 8, 15, 7, 20, 1)
valid_range <- 5:15
result <- data |> \(x) x[x %in% valid_range] |> sort()
cat('Values in range 5-15:', result, '
')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 „Operatory przypisania i specjalne” jest bezpłatna?
Tak — pełny tekst „Operatory przypisania i specjalne” 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 „Operatory przypisania i specjalne”?
Poznaj >, %in% oraz operator potoku w R. Ć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 3 z 4.
Ile czasu zajmuje lekcja „Operatory przypisania i specjalne”?
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
- Operatory arytmetyczne i porównania
- Operatory logiczne i logika boolowska
- Operatory przypisania i specjalne
- Priorytet operatorów i złożone wyrażenia