Beste Antwort
Ich glaube, diese Geschichte ist nicht anekdotisch. Wie jeder sagte, basiert R auf S und ich vermute, dass S für statistische Sprache steht und S eine Open-Source-Sprache war. Angesichts der wachsenden Bedeutung von S wollte IBM es erwerben, aber der Teil des Kernteams von S wollte es als Open Source behalten, und der verbleibende Teil stimmte dem Vorschlag von IBM zu. Später wurde der von IBM erworbene Teil zu S-plus, und die Open-Source-Community blühte auf und fügte viele Ergänzungen zu S hinzu, die schließlich in R umbenannt wurden.
Antwort
Die Verwendung ist nie obligatorisch $ beim Referenzieren in R, aber es erleichtert in vielen Fällen das Referenzieren. Das $ in R wird normalerweise verwendet, wenn auf ein benanntes Objekt innerhalb eines größeren Datenobjekts verwiesen wird. Dies kann auf Objekte wie Listen und Datenrahmen angewendet werden.
Beispiel
Erstellen wir zunächst eine Liste mit zufälligen Informationen:
random <- list("numbers" = c(1, 2, 3), "places" = list("countries" = c("Canada", "South Africa"), "cities" = c("Vancouver", "Cape Town")))
Dies ist die Struktur unserer Zufallsliste:
> random
$numbers
[1] 1 2 3
$places
$places$countries
[1] "Canada" "South Africa"
$places$cities
[1] "Vancouver" "Cape Town"
Wir können die verschiedenen Elemente in der Liste genauso referenzieren, wie in der obigen Struktur gezeigt. Wenn wir beispielsweise die gesamte Liste "Orte" mit Informationen zu Land und Stadt haben möchten, können wir wie folgt darauf verweisen:
> random$places
$countries
[1] "Canada" "South Africa"
$cities
[1] "Vancouver" "Cape Town"
Wenn wir nur die Ländernamen möchten, können wir das $ verwenden, um einen weiteren Drilldown in die Liste durchzuführen:
random$places$countries
[1] "Canada" "South Africa"
Denken Sie daran, wir Das $ kann nicht verwendet werden, wenn auf atomare Vektoren verwiesen wird (Vektoren, die einzelne Werte wie Zahlen oder Zeichenfolgen enthalten). Beispielsweise werden die obigen Ländernamen in einem Atomvektor gespeichert. Wir müssen den Indexnamen oder die Indexnummer verwenden, um ein einzelnes Land abzurufen:
> random$places$countries[2]
[1] "South Africa"
Selbst wenn das Land einen Indexnamen hätte, können wir das $ nicht verwenden.
> countries <- c("country1" = "Canada", "country2" = "South Africa")
Versuchen wir, "Südafrika" mit dem $ abzurufen:
> countries$country2
Error in countries$country2 : $ operator is invalid for atomic vectors
Wir erhalten einen Fehler, weil Länder ein Atomvektor sind. In diesem Fall müssen wir den Indexnamen oder die Indexnummer verwenden:
> countries["country2"] #using the name of the item
country2
"South Africa"
> countries[2] #using the index of the country within the vector
country2
"South Africa"
Hoffe, das hilft!