Najlepsza odpowiedź
Uważam, że ta historia nie jest anegdotyczna. Jak każdy powiedział, R jest oparty na S i domyślam się, że S oznacza język statystyczny, a S był językiem open source. Widząc rosnące znaczenie S, IBM chciał go nabyć, ale część podstawowego zespołu S chciała zachować go jako oprogramowanie typu open source, a pozostała część zgodziła się na propozycję IBM. Później IBM nabył część, a następnie stał się S-plus, a społeczność open source rozkwitła i wprowadziła wiele dodatków do S, a ostatecznie zmieniła nazwę na R.
Odpowiedź
Nigdy nie jest to obowiązkowe $ podczas odwoływania się w R, ale w wielu przypadkach ułatwia odwoływanie się. Znak $ w R jest zwykle używany podczas odwoływania się do nazwanego obiektu w większym obiekcie danych. Można to zastosować do obiektów takich jak listy i ramki danych.
Przykład
Najpierw utwórzmy listę zawierającą losowe informacje:
random <- list("numbers" = c(1, 2, 3), "places" = list("countries" = c("Canada", "South Africa"), "cities" = c("Vancouver", "Cape Town")))
Oto struktura naszej losowej listy:
> random
$numbers
[1] 1 2 3
$places
$places$countries
[1] "Canada" "South Africa"
$places$cities
[1] "Vancouver" "Cape Town"
Możemy odwoływać się do różnych pozycji na liście w dokładnie taki sam sposób, jak pokazano na powyższej strukturze. Na przykład, jeśli chcemy mieć całą listę „miejsc”, która zawiera informacje o kraju i mieście, możemy odwołać się do niej w ten sposób:
> random$places
$countries
[1] "Canada" "South Africa"
$cities
[1] "Vancouver" "Cape Town"
Jeśli chcemy tylko nazwy krajów, możemy użyć znaku $, aby przejść dalej w dół listy:
random$places$countries
[1] "Canada" "South Africa"
Pamiętaj, że nie można używać znaku $ podczas odwoływania się do wektorów atomowych (wektorów zawierających pojedyncze wartości, takie jak liczby lub ciągi znaków). Na przykład powyższe nazwy krajów są przechowywane w wektorze atomowym. Musimy użyć nazwy lub numeru indeksu, aby pobrać pojedynczy kraj:
> random$places$countries[2]
[1] "South Africa"
Nawet jeśli kraj miałby nazwę indeksu, nie będziemy mogli użyć znaku $.
> countries <- c("country1" = "Canada", "country2" = "South Africa")
Spróbujmy pobrać „RPA” za pomocą znaku $:
> countries$country2
Error in countries$country2 : $ operator is invalid for atomic vectors
Otrzymujemy błąd, ponieważ kraje są wektorami atomowymi. W tym przypadku musimy użyć nazwy lub numeru indeksu:
> 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"
Mam nadzieję, że to pomoże!