R Academy · Lekcja

Operatory przypisania i specjalne

Poznaj >, %in% oraz operator potoku w R.

Lekcja 3 z 413 kroki

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 |&gt;

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 round

Pipe 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, '
')
Bezpłatny start

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

  1. Operatory arytmetyczne i porównania
  2. Operatory logiczne i logika boolowska
  3. Operatory przypisania i specjalne
  4. Priorytet operatorów i złożone wyrażenia
← Powrót do R Academy