Bedste svar
Jeg mener, at denne historie ikke er anekdotisk. Som alle sagde, R er baseret på S, og jeg gætter på, at S står for statistisk sprog, og S var et open source-sprog. At se den voksende betydning af S IBM ønskede at erhverve den, men den del af kerneteamet i S ønskede at holde den som open source, og den resterende del blev enige om for IBMs forslag. Senere erhvervede IBM en del og blev til S-plus, og open source-samfund trivedes og lavede mange tilføjelser til S, og som til sidst blev omdøbt til R.
Svar
Det er aldrig obligatorisk at bruge $ når der henvises til R, men det gør det nemt at henvise i mange tilfælde. $ I R bruges normalt, når der henvises til et navngivet objekt i et større dataobjekt. Dette kan anvendes på objekter såsom lister og datarammer.
Eksempel
Lad os først oprette en liste, der indeholder nogle tilfældige oplysninger:
random <- list("numbers" = c(1, 2, 3), "places" = list("countries" = c("Canada", "South Africa"), "cities" = c("Vancouver", "Cape Town")))
Dette er strukturen på vores tilfældige liste:
> random
$numbers
[1] 1 2 3
$places
$places$countries
[1] "Canada" "South Africa"
$places$cities
[1] "Vancouver" "Cape Town"
Vi kan henvise til de forskellige emner på listen på nøjagtig samme måde som vist i strukturen ovenfor. Hvis vi f.eks. Vil have hele listen "steder", der indeholder land- og byoplysninger, kan vi henvise til den således:
> random$places
$countries
[1] "Canada" "South Africa"
$cities
[1] "Vancouver" "Cape Town"
Hvis vi kun ønsker landnavne, kan vi bruge $ til at bore længere nede på listen:
random$places$countries
[1] "Canada" "South Africa"
Husk, vi kan ikke bruge $, når der henvises til atomvektorer (vektorer, der indeholder enkeltværdier, såsom tal eller tegnstrenge). For eksempel er ovennævnte landsnavne lagret i en atomvektor. Vi skal bruge indeksnavnet eller nummeret for at hente et enkelt land:
> random$places$countries[2]
[1] "South Africa"
Selvom landet havde et indeksnavn, kan vi ikke bruge $.
> countries <- c("country1" = "Canada", "country2" = "South Africa")
Lad os prøve at hente "Sydafrika" med $:
> countries$country2
Error in countries$country2 : $ operator is invalid for atomic vectors
Vi får en fejl, fordi lande er en atomvektor. I dette tilfælde skal vi bruge indeksnavnet eller nummeret:
> 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"
Håber det hjælper!