R Academy · Lektion

Tilldelningsoperatorer och specialoperatorer

Utforska >, %in% och pipe-operatorn i R.

Lektion 3 av 413 steg

Tilldelningsoperatorer och specialoperatorer är en gratis lektion i R Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för R Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i R Academy innehåller totalt 4 lektioner.

Tilldelning i R

R har flera sätt att tilldela värden till variabler. Det mest idiomatiska är <-, som är den rekommenderade stilen. Du kommer även att stöta på = för tilldelning, även om den fungerar något annorlunda i vissa sammanhang.

# Both assign a value, <- is preferred
name <- 'Alice'
age = 30
cat('Name:', name, '
')
cat('Age:', age, '
')

Vänsterpil &lt;- kontra likhetstecken =

<- skapar alltid en variabel i den aktuella miljön. = kan också tilldela värden, men i funktionsanrop anger det namngivna argument i stället för att skapa en variabel. Denna skillnad är viktig.

# <- 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, '
')

Operatorn för tilldelning åt höger ->

R stöder även tilldelning från vänster till höger med ->. Detta tilldelar värdet på vänster sida till namnet på höger sida. Även om det är giltigt används det sällan i praktiken eftersom läsbarheten försämras.

# 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'

Global tilldelning med <<-

<<- tilldelar ett värde till en variabel i den överordnade (omslutande) miljön, inte i den lokala funktionsmiljön. Det används inuti funktioner för att ändra en variabel som finns utanför funktionen.

counter <- 0

increment <- function() {
  counter <<- counter + 1  # modifies the global counter
}

increment()
increment()
increment()
cat('Counter after 3 increments:', counter, '
')

Medlemskapsoperatorn %in%

%in% testar om varje element på vänster sida finns i vektorn på höger sida. Den returnerar en logisk vektor med samma längd som vänster operand. Det är det tydligaste sättet att testa medlemskap i en mängd i 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, '
')

Filtrering med %in%

%in% är särskilt användbar när den används för att filtrera vektorer eller rader i data frame. Den låter dig välja element som tillhör en fördefinierad uppsättning tillåtna värden.

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], '
')

Matrismultiplikation med %*%

%*% utför äkta matrismultiplikation (skalärprodukt), till skillnad från *, som multiplicerar element för element. För två matriser A (m x n) och B (n x p) blir resultatet en (m x p)-matris.

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)

Den inbyggda pipen |&gt;

Den inbyggda pipen |>, som introducerades i R 4.1, skickar resultatet av uttrycket på vänster sida som det första argumentet till funktionen på höger sida. Den gör kedjor av operationer mycket mer lättlästa.

# 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 med vektorer

Den inbyggda pipen |> är särskilt användbar med vektorer och numeriska operationer. Du kan kedja transformationer utan att skapa mellanliggande variabler, vilket gör koden renare och enklare att följa.

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, '
')

Anpassade infixoperatorer

R låter dig definiera anpassade infixoperatorer med syntaxen %name%. Det är så paket som dplyr definierar pipen %>%. Du kan skapa egna operatorer för domänspecifika operationer.

# 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], '
')

Snabbreferens för operatorer

Här är en sammanfattning av de specialoperatorer som behandlas i lektionen:

  • <- — standardtilldelning (rekommenderas)
  • = — tilldelning (används även för funktionsargument)
  • <<- — tilldelning i global/överordnad miljö
  • %in% — test av medlemskap
  • %*% — matrismultiplikation
  • |> — inbyggd pipe (R 4.1+)
  • %name% — syntax för anpassad infixoperator
# 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('
')

Snabbkontroll

Vad returnerar operatorn %in% när den används som c(2, 4, 6) %in% c(1, 2, 3)?

Sammanfattning: specialoperatorer

Bra gjort! Här är de viktigaste slutsatserna från lektionen:

  • Använd <- för tilldelning — det är R:s konvention
  • = fungerar för tilldelning men är tvetydig i funktionsanrop
  • <<- ändrar en variabel i den överordnade (globala) miljön från inuti en funktion
  • %in% är det tydligaste sättet att testa medlemskap i en mängd i R
  • %*% utför matrismultiplikation (inte elementvis multiplikation)
  • Den inbyggda pipen |> (R 4.1+) kedjar funktionsanrop från vänster till höger för lättläst kod
  • Anpassade operatorer följer mönstret %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, '
')
Gratis att börja

Lär dig R med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
43
Lektioner
159

Vanliga frågor

Är lektionen ”Tilldelningsoperatorer och specialoperatorer” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen R Academy, inklusive ”Tilldelningsoperatorer och specialoperatorer”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i R Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Tilldelningsoperatorer och specialoperatorer”?

Utforska >, %in% och pipe-operatorn i R. Ni övar på R Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig R Academy?

Du behöver inga förkunskaper. Utbildningen i R Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Tilldelningsoperatorer och specialoperatorer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här R Academy-lektionen?

Ja. Varje R Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Aritmetiska operatorer och jämförelseoperatorer
  2. Logiska operatorer och boolesk logik
  3. Tilldelningsoperatorer och specialoperatorer
  4. Operatorprioritet och komplexa uttryck
← Tillbaka till R Academy