Есть ли причина предпочитать '&&' над '&' in 'if', чем короткое замыкание?

Да, я знаю, был ряд вопросов (см.этотнапример) относительно использования& против&& в R, но я не нашел тот, который конкретно отвечает на мой вопрос.

Как я понимаю различия,

& выполняет поэлементное, векторизованное сравнение, как и другие арифметические операции. Следовательно, он возвращает логический вектор длиной> 1, если оба аргумента имеют длину> 1.&& сравнивает первые элементы обоих векторов и всегда возвращает результат длины 1. Более того, он делаеткороткое замыкание: cond1 && cond2 && cond3 && ... только оцениваетcond2 еслиcond1 являетсяTRUE, и так далее. Это учитывает такие вещи, какif(exists("is.R") && is.function(is.R) && is.R()) и, в частности, означает, что с помощью&& строго необходимо в некоторых случаях.

Более того,if выдает предупреждение

условие имеет длину> 1, и будет использоваться только первый элемент

если его условие имеет более одного элемента.

Судя по этим предварительным данным, я бы посчитал более безопасным& в&& в целомif заявления, где короткое замыкание не требуется.

Если что-то пошло не так во время расчетов, и у меня случайно есть вектор в одном из&Аргументы, я получаю предупреждение, и это хорошо. Если нет, то все в порядке.

Если, с другой стороны, я использовал&&и что-то пошло не так в моих расчетах и ​​один из&&аргументы это вектор, я не получаю предупреждение. Это плохо. Если по какой-то причине я действительно хочу сравнить первые элементы двух векторов, я бы сказал, что гораздо яснее сделать это явно, чем неявно.

Обратите внимание, что это противоречит тому, что кажется общим соглашением между программистами R, и противоречит тому, что рекомендуют R docs. (1)

Отсюда мой вопросЕсть ли какие-либо причины, кроме короткого замыкания, которые делают&& предпочтительнее& вif заявления?

(1) Цитированиеhelp(&&):

«&» и «&&» обозначают логическое «И» и «|» и '||' указать логическое ИЛИ. Более короткая форма выполняет поэлементное сравнение во многом так же, как арифметические операторы. Более длинная форма оценивает слева направо, рассматривая только первый элемент каждого вектора. Оценка продолжается только до определения результата. Более длинная форма подходит для программирования потока управления и обычно предпочтительна в предложениях if.

Ответы на вопрос(2)

Ваш ответ на вопрос