R Extraktionsoperator: [vs $ [Duplikat]
Es gibt mehrere Beiträge im Internet bezüglich der Unterschiede und Ähnlichkeiten zu [und $. Ich sehe einen Beitrag, in dem $nur für die interaktive Verwendung, aber nicht für die Programmierung empfohlen wird. Ich bin mir jedoch nicht sicher, ob ich verstehe, ob dies eine Präferenz ist oder ob es eine Erklärung für diese Idee gibt.
Nehmen wir nun an, ich schreibe ein Paket oder eine Funktion. Wenn ich ein Element nach Namen extrahiere (z. B. mtcars[["mpg"]]), warum sollte ich die Verwendung vermeiden mtcars$mpg?
Antworten
Es gibt zwei Unterschiede, die wirklich wichtig sind zwischen [[und $:
[[- funktioniert mit Strings (dh es unterstützt die Substitution von Variablen),$nicht. Wenn Sie habenmy_var = "mpg", können Sie verwendenmtcars[[my_var]], aber es gibt keine gute Möglichkeit,my_varmit zu verwenden$.$Wird automatisch vervollständigt, wenn ein Teilspaltenname eindeutig ist.mtcars$mwird diempgSpalte zurückgeben,mtcars[["m"]]wird zurückkehrenNULL.mtcars$dwird zurückgegeben,NULLda mehrere Spalten mit einem "d" beginnen.
# 1 macht die [[Programmierung flexibler - im programmatischen Gebrauch ist es äußerst üblich, mit Spaltennamen zu arbeiten, die als Zeichenfolgen gespeichert sind.
# 2 macht $gefährlicher - Sie sollten keine abgekürzten Spaltennamen in der Programmierung verwenden, aber in der interaktiven Verwendung kann es nett und schnell sein. (Wenn Sie diese IDE verwenden, ist dies bei den automatischen Vervollständigungsfunktionen von RStudio weitgehend umstritten.)
$Teilweise Übereinstimmung: Wenn Sie eine Spalte xxxin einem Datenrahmen benannt haben dat, dat$xxwird die xxxSpalte zurückgegeben (es sei denn, Sie haben auch eine xxSpalte). Dies kann gefährlich sein.
Ich benutze immer [["..."]]aus einem anderen Grund: Ich benutze RStudio und es gibt eine schöne Hervorhebung für Strings, während es keine Hervorhebung mit gibt $.