Os mais curtos são vetorizados, o que significa que eles podem retornar um vetor, assim:
((-2:2) >= 0) & ((-2:2) <= 0)
# [1] FALSE FALSE TRUE FALSE FALSE
A forma mais longa avalia da esquerda para a direita, examinando apenas o primeiro elemento de cada vetor;
((-2:2) >= 0) && ((-2:2) <= 0)
# [1] FALSE
Como a página de ajuda diz, isso torna a forma mais longa "apropriada para programar o fluxo de controle e [é] normalmente preferida nas cláusulas if".
Portanto, você deseja usar as formas longas apenas quando tiver certeza de que os vetores têm o comprimento um.
Você deve ter certeza absoluta de que seus vetores têm apenas o comprimento 1, como nos casos em que são funções que retornam apenas o comprimento 1 dos booleanos. Você deseja usar os formulários curtos se os vetores tiverem comprimento> possivelmente 1. Portanto, se você não tiver certeza absoluta, verifique primeiro ou use o formulário curto e, em seguida, use-o alle anyreduza-o ao comprimento um para uso em instruções de fluxo de controle, como if.
As funções alle anysão frequentemente usadas no resultado de uma comparação vetorizada para verificar se todas ou quaisquer comparações são verdadeiras, respectivamente. Os resultados dessas funções certamente têm o comprimento 1, portanto são apropriados para uso nas cláusulas if, enquanto os resultados da comparação vetorizada não são. (Embora esses resultados sejam apropriados para uso no ifelse.
Uma diferença final: o &&e ||avaliar apenas quantos termos forem necessários (o que parece ser o que se entende por curto-circuito). Por exemplo, aqui está uma comparação usando um valor indefinido a; se não curto-circuito, como &e |não, daria um erro.
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
Por fim, consulte a seção 8.2.17 no The R Inferno , intitulada "and and andand".