Gibt es einen Grund, '&&' gegenüber '&' in 'if' -Anweisungen zu bevorzugen, außer Kurzschließen?

Ja, ich weiß, es gab eine Reihe von Fragen (siehediese, zum Beispiel) bezüglich der Verwendung von& vs.&& in R, aber ich habe keine gefunden, die speziell meine Frage beantwortet.

Wie ich die Unterschiede verstehe,

& führt einen elementweisen, vektorisierten Vergleich durch, ähnlich wie die anderen arithmetischen Operationen. Es wird also ein logischer Vektor mit einer Länge> 1 zurückgegeben, wenn beide Argumente eine Länge> 1 haben.&& vergleicht die ersten Elemente beider Vektoren und gibt immer ein Ergebnis der Länge 1 zurüc Kurzschluss: cond1 && cond2 && cond3 && ... wertet nur @ acond2 wenncond1 istTRUE, und so weiter. Dies ermöglicht Dinge wieif(exists("is.R") && is.function(is.R) && is.R()) und bedeutet insbesondere, dass mit&& ist in einigen Fällen unbedingt erforderlich.

Außerdem,if gibt die Warnung aus

die Bedingung hat eine Länge> 1 und nur das erste Element wird verwendet

wenn seine Bedingung mehr als ein Element enthält.

Nach diesen Vorentscheidungen würde ich es für sicherer halten, @ vorzuzieh& zu&& insgesamtif Anweisungen, bei denen kein Kurzschluss erforderlich ist.

Wenn während der Berechnung etwas schief gelaufen ist und ich versehentlich einen Vektor in einem von @ ha&s Argumente bekomme ich eine Warnung, was gut ist. Wenn nicht, ist auch alles in Ordnung.

Wenn andererseits habe ich&&, und bei meinen Berechnungen ist etwas schief gelaufen und einer von&&s Argumente sind Vektoren, ich bekomme keine Warnung. Das ist schlecht. Wenn ich aus irgendeinem Grund die ersten Elemente zweier Vektoren wirklich vergleichen möchte, würde ich argumentieren, dass es viel sauberer ist, dies explizit und nicht implizit zu tun.

Bitte beachten Sie, dass dies im Widerspruch zu der anscheinend üblichen Vereinbarung zwischen R-Programmierern und den Empfehlungen der R-Dokumente steht. (1)

Hence meine Frage: Gibt es andere Gründe als Kurzschlüsse, die @ auslöse&& vorzuziehen& imif Aussagen?

(1) Zitieren vonhelp(&&):

'&' und '&&' bezeichnen logisches UND und '|' und '||' logisches ODER angeben. Die kürzere Form führt elementweise Vergleiche ähnlich wie arithmetische Operatoren durch. Die längere Form wird von links nach rechts ausgewertet und untersucht nur das erste Element jedes Vektors. Die Auswertung erfolgt nur so lange, bis das Ergebnis feststeht. Die längere Form ist für die Programmierung des Kontrollflusses geeignet und wird normalerweise in 'if'-Klauseln bevorzugt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage