Les plus courts sont vectorisées, ce qui signifie qu'ils peuvent retourner un vecteur, comme ceci:
> ((-2:2) >= 0) & ((-2:2) <= 0)
[1] FALSE FALSE TRUE FALSE FALSE
La forme longue évalue la gauche vers la droite de l'examen uniquement le premier élément de chaque vecteur, de sorte que la donne
> ((-2:2) >= 0) && ((-2:2) <= 0)
[1] FALSE
Que la page d'aide dit, ce qui rend le plus "approprié pour la programmation, le contrôle de flux et [est] généralement privilégiées dans la si les clauses."
Si vous souhaitez utiliser les formulaires longs seulement quand vous êtes certains que les vecteurs sont de longueur.
Vous devez être absolument certain que votre vecteurs ne sont de longueur 1, comme dans les cas où ils sont les fonctions qui retournent seulement d'une longueur de 1 booléens. Vous souhaitez utiliser les formes courtes si les vecteurs sont de longueur éventuellement >1. Donc, si vous n'êtes pas absolument sûr, vous devez vérifier d'abord, ou utiliser le formulaire court et ensuite utiliser all
et any
de le réduire à longueur pour une utilisation dans les instructions de flux de contrôle, comme if
.
Les fonctions all
et any
sont souvent utilisés sur le résultat d'un vectorisé comparaison pour voir si l'une ou toutes les comparaisons sont remplies, respectivement. Les résultats de ces fonctions sont sûr d'être d'une longueur de 1 de sorte qu'ils sont appropriés pour une utilisation dans si les clauses, tandis que les résultats de la vectorisé comparaison ne sont pas. (Bien que ces résultats seraient appropriés pour une utilisation en ifelse
.
Une dernière différence: l' &&
et ||
seulement d'évaluer le nombre de termes dont ils ont besoin pour (ce qui semble être ce que l'on entend par court-circuit). Par exemple, voici une comparaison à l'aide d'une valeur indéfinie a
; si elle n'a pas de court-circuit, &
et |
ne pas, il serait une erreur.
> 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
Enfin, voir la section 8.2.17 dans La R Inferno, intitulée "et et andand".