Menu

R Operatörleri: Aritmetik, Karşılaştırma, Mantıksal, %in% ve %%

R'de ihtiyacınız olan her operatör - %% ve %/% dahil aritmetik, vektörleştirilmiş karşılaştırmalar, & ile && ayrımı ve üyelik testi için %in%.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

R'nin Size Verdiği Operatörler

R'nin operatörleri dört çalışma grubuna ayrılır: aritmetik (+ - * / ^ %% %/%), karşılaştırma (== != < <= > >=), mantıksal (& | && || ! xor) ve üyelik testi %in%. Onları çoğu dilden ayıran iki şey vardır: neredeyse hepsi vektörleştirilmiştir - bütün vektörler üzerinde eleman eleman çalışırlar - ve R'de birbirinin yerine geçmeyen iki VE operatörü ile iki VEYA operatörü vardır. Bu sayfa hepsini ve sessizce yanlış yanıtlar üreten öncelik tuzaklarını ele alıyor.

Aritmetik: +, -, *, /, ^, %% ve %/%

İlk beşi beklediğiniz şeyi yapar. Yüzde işaretiyle sarılı ikisi - %% (mod, kalan) ve %/% (tam sayı bölmesi, bölüm) - insanların arattığı olanlardır:

/ işlecinin her zaman kayan noktalı bölme yaptığına dikkat edin - 17 / 5 sonucu 3.4'tür, asla 3 değil. Tam sayı kısmını istiyorsanız %/% tam da bunun içindir.

%% işlecinin gündelik işi bölünebilirliktir. Bir sayı, 2'ye bölündüğünde kalan bırakmıyorsa çifttir:

O ikinci satır duraklamaya değer: negatif bir işlenenle R'nin %% işleci bölenin işaretini taşıyan bir sonuç döndürür (-7 %% 3 sonucu 2'dir, çünkü -7 = -3 * 3 + 2). Bazı diller bunu diğer türlü yapar; kod taşıyorsanız kontrol edin.

Karşılaştırma Operatörleri Vektörleştirilmiştir

==, !=, <, <=, >, >= eleman eleman karşılaştırır ve tek bir yanıt değil, bir logical vektör döndürür:

R'deki neredeyse tüm filtrelemenin arkasındaki motor budur - bütün bir vektörü bir değerle karşılaştırır, bir mantıksal maske alır ve alt küme almak için maskeyi kullanırsınız. Ondalıklarda == ile ilgili bir uyarı: kayan noktalı sayılar yaklaşık olarak saklanır, dolayısıyla 0.1 + 0.2 == 0.3 sonucu FALSE'tur. Ondalık karşılaştırmalarda all.equal() tercih edin ya da abs(x - y) < 1e-9 kontrolü yapın.

Mantıksal Operatörler: & ve && (Klasik Karışıklık)

R'de iki VE operatörü ve iki VEYA operatörü vardır; yanlışını seçmek bir erginlenme törenidir.

& ve | vektörleştirilmiştir. İki logical vektörü eleman eleman birleştirirler:

Veri üzerinde bir filtre kurarken bunları kullanın: df[df$age > 30 & df$city == "Lisbon", ].

&& ve || skalerdir ve kısa devre yapar. Tek değerler alır, tek bir TRUE/FALSE döndürür ve ilki yanıtı çoktan belirlemişse ikinci işleneni tamamen atlarlar:

O ikinci satır kısa devreyi gösterir: x < 0 FALSE olduğu için R stop() çağrısını hiç değerlendirmez. && işlecinin if() koşullarına ait olmasının nedeni tam da budur - if (!is.na(x) && x > 10) yazabilirsiniz ve x NA olduğunda x > 10 kısmı güvenle atlanır.

Genel kural: vektörler ve veri filtreleme için &/|, if() koşulları için &&/||. Ve R 4.3'ten beri bu dişlerle uygulanıyor: && veya || işlecine uzunluğu 1'den büyük bir vektör vermek bir hatadır (eski R sürümleri sessizce yalnızca ilk elemanı kullanıyordu ve bu yıllarca gerçek hataları gizledi).

xor(a, b) kümeyi tamamlar - ikisinden tam olarak biri TRUE olduğunda TRUE'dur:

%in%: Üyelik Testi

x %in% table, x içindeki her eleman için "bu, table içinde herhangi bir yerde geçiyor mu?" diye sorar. Gerçek R kodunda en çok kullanılan operatörlerden biridir:

Test edilen taraf bütün bir vektör olabilir; bu da %in% işlecini satırları izin verilen bir değer kümesine göre filtrelemenin doğal aracı yapar.

Ayrıca yoksa yazacağınız alternatifi de geride bırakır - | ile birbirine yapıştırılmış bir == zinciri:

Beş izinli değerle == zinciri bir tekrar duvarına dönüşür; %in% sürümünde ise yalnızca vektör büyür. İkinci, daha ince bir avantajı da vardır - %in% asla NA döndürmez:

NA == 1 sonucu NA'dır, çünkü R bilinmeyen bir değerin 1'e eşit olup olmadığını bilemez - bu davranış eksik değerler sayfasında derinlemesine ele alınıyor. O NA daha sonra ulaştığı her if() ifadesini zehirler. %in% her zaman TRUE ya da FALSE yanıtı vererek sorunun tamamını atlatır; eksik olabilecek veri üzerindeki koşullar için daha güvenli seçim olmasının nedeni budur.

Öncelik Tuzakları

İki operatör önceliği tuzağı, "R bozuk" anlarının orantısız bir kısmını oluşturur. Birincisi, ^ tekli eksiden daha sıkı bağlar:

İkincisi, iki nokta üst üste ikili aritmetikten daha sıkı bağlar:

Şüphedeyseniz parantez ekleyin. Bir maliyetleri yoktur ve her okur (gelecekteki siz dahil) onları yorumlayıcıyla aynı şekilde ayrıştırır.

$ ve [ ]: Erişim Operatörleri

Sürekli olarak $, [ ] ve [[ ]] de göreceksiniz - teknik olarak bunlar da operatördür ve hesaplama yapmak yerine yapılardan değer çekmek için kullanılırlar:

Bunlar vektörler, listeler ve veri çerçeveleri sayfalarında tam olarak ele alınıyor - burada onları aynı operatör ailesinin üyeleri olarak tanımak yeterli.

Buradan Ne Çıkarıyorsunuz

  • %% kalanı, %/% tam bölümü verir; x %% 2 == 0 çift olmayı test eder.
  • Karşılaştırmalar vektörleştirilmiştir - filtreleyebileceğiniz bir logical vektör döndürürler.
  • &/| vektörleri eleman eleman birleştirir; &&/|| if() içindeki tek değerler içindir ve kısa devre yapar. R 4.3'ten beri daha uzun bir vektörde && bir hatadır.
  • x %in% table, zincirlenmiş == ifadelerinin yerine geçer ve asla NA döndürmez.
  • -2^2 sonucu -4'tür ve 1:n - 1 sıfırdan başlar - şüphedeyseniz parantez kullanın.

Sırada: bu operatörleri if, else ve ifelse() içinde iş başına koymak - R'nin koşul ifadeleri.

Sıkça Sorulan Sorular

R'de %% ne yapar?

%% mod operatörüdür - bir bölmenin kalanını döndürür. 17 %% 5 sonucu 2'dir. Eşi olan %/% tam sayı bölmesi yapar ve kalansız bölümü döndürür: 17 %/% 5 sonucu 3'tür. %% işlecinin klasik kullanımı çift sayı testidir: x %% 2 == 0.

R'de & ile && arasındaki fark nedir?

& vektörleştirilmiştir: iki vektörü eleman eleman karşılaştırır ve aynı uzunlukta bir vektör döndürür. && yalnızca tek değerlerle çalışır, kısa devre yapar (ilk işlenen sonucu belirliyorsa ikinciyi atlar) ve tam olarak tek bir TRUE ya da FALSE döndürür. Vektörleri filtrelerken &, if() koşullarının içinde && kullanın. R 4.3'ten beri && veya || işlecine 1'den uzun bir vektör vermek uyarı değil hatadır.

R'de %in% ne yapar?

x %in% table, x içindeki her elemanın table içinde herhangi bir yerde geçip geçmediğini test eder ve eleman başına TRUE ya da FALSE döndürür. "mango" %in% basket, | ile birleştirilmiş bir == zincirinin yerine geçer ve =='in aksine asla NA döndürmez - test edilen tarafta eksik bir değer olması yalnızca FALSE verir.

R'de -2^2 neden -4 döndürür?

^ operatörü tekli eksiden daha sıkı bağladığı için R -2^2 ifadesini -(2^2) olarak okur ve bu da -4'tür. Eksi ikinin karesini kastediyorsanız (-2)^2 yazın; sonuç 4 olur. İki nokta üst üstenin de benzer bir tuzağı vardır: 1:n - 1, 1:(n - 1) değil (1:n) - 1 anlamına gelir.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA