Bästa svaret
Jag tror att den här historien inte är anekdotisk. Som alla sa är R baserat på S och jag antar att S står för statistiskt språk och S var ett öppen källkodsspråk. Att se den växande betydelsen av S IBM ville förvärva den, men den del av S-kärngruppen ville behålla den som öppen källkod och den återstående delen gick med på IBMs förslag. Senare förvärvade IBM en del och blev S-plus och öppen källkodsgrupp blomstrade och gjorde många tillägg till S och som så småningom döptes om till R. $ vid referens i R, men det gör det enkelt att referera i många fall. $ I R används vanligtvis när man refererar till ett namngivet objekt i ett större dataobjekt. Detta kan tillämpas på objekt som listor och dataramar.
Exempel
Låt oss först skapa en lista som innehåller slumpmässig information:
random <- list("numbers" = c(1, 2, 3), "places" = list("countries" = c("Canada", "South Africa"), "cities" = c("Vancouver", "Cape Town")))
Detta är strukturen för vår slumpmässiga lista:
> random
$numbers
[1] 1 2 3
$places
$places$countries
[1] "Canada" "South Africa"
$places$cities
[1] "Vancouver" "Cape Town"
Vi kan referera till de olika objekten i listan på exakt samma sätt som visas i strukturen ovan. Om vi till exempel vill ha hela "platser" -listan, som innehåller land- och stadsinformation, kan vi referera till den så här:
> random$places
$countries
[1] "Canada" "South Africa"
$cities
[1] "Vancouver" "Cape Town"
Om vi bara vill ha landsnamnen kan vi använda $ för att borra längre ner i listan:
random$places$countries
[1] "Canada" "South Africa"
Tänk på att vi kan inte använda $ när man hänvisar till atomvektorer (vektorer som innehåller enstaka värden, som siffror eller teckensträngar). Till exempel lagras namnen ovan i en atomvektor. Vi måste använda indexnamnet eller numret för att hämta ett enda land:
> random$places$countries[2]
[1] "South Africa"
Även om landet hade ett indexnamn kan vi inte använda $.
> countries <- c("country1" = "Canada", "country2" = "South Africa")
Låt oss försöka hämta "Sydafrika" med $:
> countries$country2
Error in countries$country2 : $ operator is invalid for atomic vectors
Vi får ett fel, eftersom länder är en atomvektor. I det här fallet måste vi använda indexnamnet eller numret:
> 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"
Hoppas det hjälper!