¿Hay alguna razón para preferir '&&' sobre '&' en 'if', aparte de los cortocircuitos?

Sí, lo sé, ha habido una serie de preguntas (veréste, por ejemplo) con respecto al uso de& vs.&& en R, pero no he encontrado uno que responda específicamente a mi pregunta.

Como entiendo las diferencias,

& hace una comparación vectorizada por elementos, al igual que las otras operaciones aritméticas. Por lo tanto, devuelve un vector lógico que tiene una longitud> 1 si ambos argumentos tienen una longitud> 1.&& compara los primeros elementos de ambos vectores y siempre devuelve un resultado de longitud 1. Además, lo hacecortocircuito: cond1 && cond2 && cond3 && ... solo evalúacond2 Sicond1 esTRUE, Etcétera. Esto permite cosas comoif(exists("is.R") && is.function(is.R) && is.R()) y particularmente significa que usar&& Es estrictamente necesario en algunos casos.

Además,if emite la advertencia

la condición tiene una longitud> 1 y solo se usará el primer elemento

si su condición tiene más de un elemento.

A juzgar por estos preliminares, consideraría más seguro preferir& a&& en todoif declaraciones donde no se requiere cortocircuito.

Si algo salió mal durante los cálculos y accidentalmente tengo un vector en uno de&Argumentos, recibo una advertencia, que es bueno. Si no, todo está bien también.

Si, por otro lado, usaba&&, y algo salió mal en mis cálculos y uno de&&Los argumentos son un vector, no recibo una advertencia. Esto es malo. Si, por alguna razón, realmente quisiera comparar los primeros elementos de dos vectores, diría que es mucho más claro hacerlo explícitamente que implícitamente.

Tenga en cuenta que esto es contrario a lo que parece ser un acuerdo común entre los programadores de R y contrario a lo que recomiendan los documentos de R. (1)

De ahí mi pregunta: ¿Hay alguna razón, excepto cortocircuito, que haga&& preferible a& enif declaraciones?

(1) Citandohelp(&&):

'&' y '&&' indican AND lógico y '|' y '||' indicar OR lógico. La forma más corta realiza comparaciones por elementos de la misma manera que los operadores aritméticos. La forma más larga evalúa de izquierda a derecha examinando solo el primer elemento de cada vector. La evaluación continúa solo hasta que se determina el resultado. La forma más larga es apropiada para programar el flujo de control y generalmente se prefiere en las cláusulas 'if'.

Respuestas a la pregunta(2)

Su respuesta a la pregunta