Beste antwoord
Ik geloof dat dit verhaal niet anekdotisch is. Zoals iedereen zei, is R gebaseerd op S en ik vermoed dat S staat voor statistische taal en S een open source-taal was. Gezien het groeiende belang van S, wilde IBM het overnemen, maar het deel van het kernteam van S wilde het als open source houden en het resterende deel stemde in met het voorstel van IBM. Later verwierf IBM een deel en werd S-plus en de open source-gemeenschap bloeide en maakte veel toevoegingen aan S en dat werd uiteindelijk omgedoopt tot R.
Antwoord
Het is nooit verplicht om te gebruiken $ bij het verwijzen in R, maar het maakt verwijzingen in veel gevallen gemakkelijk. De $ in R wordt meestal gebruikt bij het verwijzen naar een benoemd object binnen een groter gegevensobject. Dit kan worden toegepast op objecten zoals lijsten en dataframes.
Voorbeeld
Laten we eerst een lijst maken die wat willekeurige informatie bevat:
random <- list("numbers" = c(1, 2, 3), "places" = list("countries" = c("Canada", "South Africa"), "cities" = c("Vancouver", "Cape Town")))
Dit is de structuur van onze willekeurige lijst:
> random
$numbers
[1] 1 2 3
$places
$places$countries
[1] "Canada" "South Africa"
$places$cities
[1] "Vancouver" "Cape Town"
We kunnen naar de verschillende items in de lijst verwijzen op exact dezelfde manier als in de bovenstaande structuur. Als we bijvoorbeeld de volledige lijst met plaatsen willen, die land- en stadsinformatie bevat, kunnen we er als volgt naar verwijzen:
> random$places
$countries
[1] "Canada" "South Africa"
$cities
[1] "Vancouver" "Cape Town"
Als we alleen de landnamen willen, kunnen we de $ gebruiken om verder naar beneden in de lijst te gaan:
random$places$countries
[1] "Canada" "South Africa"
Houd er rekening mee dat we kan de $ niet gebruiken bij verwijzing naar atomaire vectoren (vectoren die enkele waarden bevatten, zoals getallen of tekenreeksen). De bovenstaande landnamen worden bijvoorbeeld opgeslagen in een atoomvector. We moeten de indexnaam of het indexnummer gebruiken om één land op te halen:
> random$places$countries[2]
[1] "South Africa"
Zelfs als het land een indexnaam had, kunnen we de $.
> countries <- c("country1" = "Canada", "country2" = "South Africa")
niet gebruiken
Laten we proberen "Zuid-Afrika" op te halen met de $:
> countries$country2
Error in countries$country2 : $ operator is invalid for atomic vectors
We krijgen een foutmelding, omdat landen een atoomvector zijn. In dit geval moeten we de indexnaam of het indexnummer gebruiken:
> 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"
Ik hoop dat dit helpt!