Daha kısa olanları vektörize edilir, yani bir vektörü döndürebilirler, şöyle:
((-2:2) >= 0) & ((-2:2) <= 0)
# [1] FALSE FALSE TRUE FALSE FALSE
Uzun form soldan sağa her vektörün sadece ilk elemanını inceleyerek değerlendirir, böylece
((-2:2) >= 0) && ((-2:2) <= 0)
# [1] FALSE
Yardım sayfasının dediği gibi, bu daha uzun formu "kontrol akışını programlamak için uygun hale getirir ve eğer if maddelerinde tipik olarak tercih edilir".
Bu yüzden uzun formları sadece vektörlerin bir uzunluk olduğundan emin olduğunuzda kullanmak istersiniz.
Sen olmalıdır kesinlikle onlar dönüş sadece uzunluğu 1 mantıksal ifadenin fonksiyonlardır nerede vektörler gibi durumlarda sadece uzunluğu 1, olan belirli. Vektörlerin uzunluğu muhtemelen> 1 ise kısa formları kullanmak istersiniz. Bu yüzden kesinlikle emin değilseniz, önce kontrol etmeli veya kısa formu kullanmalı all
ve sonra any
kontrol akış deyimlerinde kullanmak üzere bir uzunluğa azaltmak için ve tuşlarını kullanmalısınız if
.
Fonksiyonlar all
ve any
genellikle karşılaştırmanın tamamının veya bir kısmının doğru olup olmadığını görmek için vectorized karşılaştırmanın sonucunda kullanılır. Bu işlevlerden elde edilen sonuçların uzunluk 1 olduğundan emin olun, bu nedenle if cümlelerinde kullanım için uygun olurken, vektörleştirilmiş karşılaştırmadan elde edilen sonuçlar değildir. (Bu sonuçlar, kullanım için uygun olsa da ifelse
.
Son bir fark: &&
ve ||
sadece ihtiyaç duydukları kadar çok terimi değerlendirin (kısa devre ile kastedilen gibi). Örneğin, tanımsız bir değer kullanan bir karşılaştırma a
; kısa devre, değil mi sanki &
ve |
yok, bu bir hata verecekti.
a
# Error: object 'a' not found
TRUE || a
# [1] TRUE
FALSE && a
# [1] FALSE
TRUE | a
# Error: object 'a' not found
FALSE & a
# Error: object 'a' not found
Son olarak, R Inferno'daki "ve ve ve" başlıklı bölüm 8.2.17'ye bakınız .