Operatorul SAU este o componentă fundamentală în programarea R care vă permite să evaluați mai multe condiții simultan. Acest ghid vă va ghida prin toate, de la sintaxa de bază la aplicații avansate, ajutându-vă să stăpâniți operațiunile logice în R pentru manipularea și analiza eficientă a datelor.
Tipuri de operatori OR
R oferă doi operatori OR distincti (sursa: DataMentor):
|: operator SAU în funcție de elemente||: operator logic OR
# Basic syntax comparison x <- c(TRUE, FALSE) y <- c(FALSE, TRUE) # Element-wise OR x | y # Returns: TRUE TRUE
# Logical OR (only first elements) x(1) || y(1) # Returns: TRUE
x(2) || y(2)
Tabel de comparație: | vs ||
|--------------------|------------------|-------------------| | Feature | Single | (|) | Double || (||) | |--------------------|------------------|-------------------| | Vector Operation | Yes | No | | Short-circuit | No | Yes | | Performance | Slower | Faster | | Use Case | Vectors/Arrays | Single values | |--------------------|------------------|-------------------|
Exemple numerice de bază
# Example from Statistics Globe numbers <- c(2, 5, 8, 12, 15) result <- numbers < 5 | numbers > 10 print(result) # Returns: TRUE FALSE FALSE TRUE TRUE
(1) TRUE FALSE FALSE TRUE TRUE
Aplicație din lumea reală cu mtcars Dataset
# Example from Noobz.ro data(mtcars) # Find cars with high MPG or low weight efficient_cars <- mtcars(mtcars$mpg > 25 | mtcars$wt < 2.5, ) print(head(efficient_cars))
mpg cyl disp hp drat wt qsec vs am gear carb Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Folosind OR cu dplyr (sursa: DataCamp)
library(dplyr) mtcars %>% filter(mpg > 25 | wt < 2.5) %>% select(mpg, wt)
mpg wt Datsun 710 22.8 2.320 Fiat 128 32.4 2.200 Honda Civic 30.4 1.615 Toyota Corolla 33.9 1.835 Toyota Corona 21.5 2.465 Fiat X1-9 27.3 1.935 Porsche 914-2 26.0 2.140 Lotus Europa 30.4 1.513
Sfaturi de optimizare a performanței
Conform Statistics Globe, luați în considerare aceste bune practici de performanță:
- Utilizare
||pentru condiții unice în declarațiile if - Așezați mai întâi condițiile mai probabile când utilizați
|| - Utilizați operații vectorizate cu
|pentru seturi mari de date
# Efficient code example
if(nrow(df) > 1000 || any(is.na(df))) {
# Process large or incomplete datasets
}
Manipularea valorilor NA
# Example from GeeksforGeeks x <- c(TRUE, FALSE, NA) y <- c(FALSE, FALSE, TRUE) # Standard OR operation x | y # Returns: TRUE FALSE NA
# Handling NAs explicitly x | y | is.na(x) # Returns: TRUE FALSE TRUE
Probleme de reciclare a vectorului
# Potential issue vec1 <- c(TRUE, FALSE, TRUE) vec2 <- c(FALSE) result <- vec1 | vec2 # Recycling occurs # Better approach vec2 <- rep(FALSE, length(vec1)) result <- vec1 | vec2 print(result)
Problema 1: Provocarea analizei datelor
Folosind sistemul încorporat iris set de date, găsiți toate florile care îndeplinesc oricare dintre aceste condiții: – Lungimea sepalului mai mare de 6,5 – Lățimea petalei mai mare de 1,8
# Your code here
Soluţie:
# From DataCamp's practical examples data(iris) selected_flowers <- iris(iris$Sepal.Length > 6.5 | iris$Petal.Width > 1.8, ) print(head(selected_flowers))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species 51 7.0 3.2 4.7 1.4 versicolor 53 6.9 3.1 4.9 1.5 versicolor 59 6.6 2.9 4.6 1.3 versicolor 66 6.7 3.1 4.4 1.4 versicolor 76 6.6 3.0 4.4 1.4 versicolor 77 6.8 2.8 4.8 1.4 versicolor
Problema 2: Analiza clienților
# Create sample customer data
customers <- data.frame(
age = c(25, 35, 42, 19, 55),
purchase = c(150, 450, 200, 100, 300),
loyal = c(TRUE, TRUE, FALSE, FALSE, TRUE)
)
# Find high-value or loyal customers
# Your code here
Soluţie:
valuable_customers <- customers(customers$purchase > 250 | customers$loyal == TRUE, ) print(valuable_customers)
age purchase loyal 1 25 150 TRUE 2 35 450 TRUE 5 55 300 TRUE
Folosind OR cu dplyr și tidyverse
Din exemplele avansate ale R-bloggerilor:
library(tidyverse) mtcars %>% filter(mpg > 20 | hp > 200) %>% arrange(desc(mpg)) %>% select(mpg, hp) %>% head(5)
mpg hp Toyota Corolla 33.9 65 Fiat 128 32.4 66 Honda Civic 30.4 52 Lotus Europa 30.4 113 Fiat X1-9 27.3 66
SAU Operații în data.table
library(data.table) dt <- as.data.table(mtcars) result <- dt(mpg > 20 | hp > 200) print(result)
mpg cyl disp hp drat wt qsec vs am gear carb
1: 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
2: 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
3: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
4: 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
5: 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
6: 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
7: 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
8: 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
9: 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
10: 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
11: 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
12: 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
13: 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
14: 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
15: 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
16: 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
17: 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
18: 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
19: 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
20: 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
21: 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
mpg cyl disp hp drat wt qsec vs am gear carb
Pe baza analizei experților Statistics Globe:
- Utilizare
|pentru operații vectorizate în întregi seturi de date - Implementează
||pentru comparații logice unice în structurile de control - Luați în considerare manipularea NA în operațiuni logice
- Utilizați implementările specifice pachetului pentru o performanță mai bună
- Testați întotdeauna mai întâi cu seturi de date mici
Probleme comune și soluții
De la GeeksforGeeks și DataMentor:
- Nepotrivire lungime a vectorului
# Problem x <- c(TRUE, FALSE) y <- c(TRUE, FALSE, TRUE) # Different length # Solution # Ensure equal lengths length(y) <- length(x)
- NA Manipulare
# Problem data <- c(1, NA, 3, 4) result <- data > 2 | data < 2 # Contains NA print(result)
# Solution result <- data > 2 | data < 2 | is.na(data) print(result)
Î: Cum se compară performanța operatorului SAU în seturi mari de date?
Potrivit DataCamp, operațiunile vectorizate cu | sunt mai eficiente pentru seturi mari de date, în timp ce || este mai rapid pentru afecțiuni individuale.
Î: Pot folosi operatori OR cu variabile factor?
Da, dar convertiți mai întâi factorii în caractere sau numerice pentru rezultate fiabile (Statistics Globe).
Î: Cum lucrează operatorii SAU cu diferite tipuri de date?
R forțează valorile la logic înainte de a aplica operațiunile SAU. Consultați regulile de conversie a tipului în documentația R.
Î: Care este cea mai bună practică pentru condiții complexe?
R-bloggerii recomandă utilizarea parantezelor și împărțirea condițiilor complexe în bucăți mai mici, ușor de citit.
Î: Cum optimizez operațiunile SAU în data.table?
data.table oferă metode optimizate pentru operații logice în sintaxa sa.
Împărtășiți-vă experiențele operatorului sau întrebările dvs. în comentariile de mai jos! Urmați-ne pentru mai multe tutoriale și sfaturi de programare R.
Pentru o practică practică, încercați codul nostru exemplu în RStudio și experimentați cu diferite condiții. Alăturați-vă comunității noastre de programare R pentru a discuta despre tehnici mai avansate și cele mai bune practici.
Codare fericită! 🚀

Vă puteți conecta cu mine la oricare dintre cele de mai jos:
Canalul Telegram aici: https://t.me/steveondata
