Yang lebih pendek adalah vektor, artinya mereka dapat mengembalikan vektor, seperti ini:
((-2:2) >= 0) & ((-2:2) <= 0)
# [1] FALSE FALSE TRUE FALSE FALSE
Bentuk yang lebih panjang mengevaluasi dari kiri ke kanan hanya memeriksa elemen pertama dari setiap vektor, sehingga memberi di atas
((-2:2) >= 0) && ((-2:2) <= 0)
# [1] FALSE
Seperti yang dikatakan halaman bantuan, ini membuat formulir yang lebih panjang "sesuai untuk aliran kontrol pemrograman dan biasanya lebih disukai di dalam klausa if."
Jadi, Anda ingin menggunakan formulir panjang hanya jika Anda yakin vektornya panjang satu.
Anda harus benar - benar yakin vektor Anda hanya panjang 1, seperti dalam kasus di mana mereka adalah fungsi yang hanya mengembalikan panjang 1 boolean. Anda ingin menggunakan formulir pendek jika vektornya panjang mungkin> 1. Jadi jika Anda tidak benar-benar yakin, Anda harus memeriksa dulu, atau menggunakan formulir pendek dan kemudian menggunakan all
dan any
menguranginya menjadi panjang untuk digunakan dalam laporan aliran kontrol, seperti if
.
Fungsi all
dan any
sering digunakan pada hasil perbandingan vektor untuk melihat apakah semua atau salah perbandingan benar, masing-masing. Hasil dari fungsi-fungsi ini pasti panjang 1 sehingga mereka cocok untuk digunakan dalam klausa if, sedangkan hasil dari perbandingan vektor tidak. (Meskipun hasil tersebut akan sesuai untuk digunakan di ifelse
.
Satu perbedaan terakhir: &&
dan ||
hanya mengevaluasi sebanyak mungkin istilah yang mereka perlukan (yang tampaknya merupakan yang dimaksud dengan hubungan arus pendek). Misalnya, inilah perbandingan menggunakan nilai yang tidak ditentukan a
; jika tidak korsleting, seperti &
dan |
tidak, itu akan memberikan kesalahan.
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
Akhirnya, lihat bagian 8.2.17 dalam The R Inferno , berjudul "and and andand".