Migliore risposta
Credo che questa storia non sia aneddotica. Come tutti hanno detto, R è basato su S e immagino che S stia per linguaggio statistico e S fosse un linguaggio open source. Vedendo limportanza crescente di S, IBM voleva acquisirlo, ma la parte del team principale di S voleva mantenerlo come open source e la parte rimanente accettò la proposta di IBM. Successivamente la parte acquisita da IBM divenne S-plus e la comunità open source prosperò e fece molte aggiunte a S e che alla fine ribattezzò R.
Risposta
Non è mai obbligatorio da usare $ quando si fa riferimento in R, ma in molti casi rende semplice il riferimento. Il $ in R viene solitamente utilizzato quando si fa riferimento a un oggetto denominato allinterno di un oggetto dati più grande. Può essere applicato a oggetti quali elenchi e frame di dati.
Esempio
Creiamo prima un elenco che contenga alcune informazioni casuali:
random <- list("numbers" = c(1, 2, 3), "places" = list("countries" = c("Canada", "South Africa"), "cities" = c("Vancouver", "Cape Town")))
Questa è la struttura del nostro elenco casuale:
> random
$numbers
[1] 1 2 3
$places
$places$countries
[1] "Canada" "South Africa"
$places$cities
[1] "Vancouver" "Cape Town"
Possiamo fare riferimento ai diversi elementi allinterno dellelenco esattamente allo stesso modo mostrato nella struttura sopra. Ad esempio, se vogliamo lintero elenco "luoghi", che contiene informazioni sul paese e sulla città, possiamo fare riferimento ad esso in questo modo:
> random$places
$countries
[1] "Canada" "South Africa"
$cities
[1] "Vancouver" "Cape Town"
Se vogliamo solo i nomi dei paesi, possiamo utilizzare $ per visualizzare più in basso lelenco:
random$places$countries
[1] "Canada" "South Africa"
Tieni presente che noi non è possibile utilizzare $ quando si fa riferimento a vettori atomici (vettori che contengono valori singoli, come numeri o stringhe di caratteri). Ad esempio, i nomi dei paesi sopra sono memorizzati allinterno di un vettore atomico. Dobbiamo utilizzare il nome o il numero dellindice per recuperare un singolo paese:
> random$places$countries[2]
[1] "South Africa"
Anche se il paese avesse un nome di indice, non saremo in grado di utilizzare $.
> countries <- c("country1" = "Canada", "country2" = "South Africa")
Proviamo a recuperare "Sud Africa" con $:
> countries$country2
Error in countries$country2 : $ operator is invalid for atomic vectors
Otteniamo un errore, perché i paesi sono un vettore atomico. In questo caso, dobbiamo utilizzare il nome o il numero dellindice:
> 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"
Spero che questo aiuti!