Melhor resposta
Eu acredito que esta história não é anedótica. Como todos disseram, R é baseado em S e eu estou supondo que S significa linguagem estatística e S era uma linguagem de código aberto. Vendo a importância crescente do S, a IBM queria adquiri-lo, mas a parte da equipe principal do S queria mantê-lo como código aberto e o restante concordou com a proposta da IBM. Mais tarde, a IBM adquiriu parte e se tornou S-plus e a comunidade de código aberto prosperou e fez muitas adições a S e que acabou renomeada como R.
Resposta
Nunca é obrigatório usar $ ao fazer referência em R, mas torna a referência fácil em muitos casos. O $ em R é geralmente usado ao fazer referência a um objeto nomeado dentro de um objeto de dados maior. Isso pode ser aplicado a objetos como listas e frames de dados.
Exemplo
Vamos primeiro criar uma lista que contém algumas informações aleatórias:
random <- list("numbers" = c(1, 2, 3), "places" = list("countries" = c("Canada", "South Africa"), "cities" = c("Vancouver", "Cape Town")))
Esta é a estrutura de nossa lista aleatória:
> random
$numbers
[1] 1 2 3
$places
$places$countries
[1] "Canada" "South Africa"
$places$cities
[1] "Vancouver" "Cape Town"
Podemos fazer referência aos diferentes itens na lista exatamente da mesma maneira que mostrado na estrutura acima. Por exemplo, se quisermos toda a lista de “lugares”, que contém informações de país e cidade, podemos referenciá-la assim:
> random$places
$countries
[1] "Canada" "South Africa"
$cities
[1] "Vancouver" "Cape Town"
Se quisermos apenas os nomes dos países, podemos usar $ para detalhar mais a lista:
random$places$countries
[1] "Canada" "South Africa"
Lembre-se, nós não pode usar o $ ao fazer referência a vetores atômicos (vetores que contêm valores únicos, como números ou cadeias de caracteres). Por exemplo, os nomes dos países acima são armazenados em um vetor atômico. Temos que usar o nome ou número do índice para recuperar um único país:
> random$places$countries[2]
[1] "South Africa"
Mesmo se o país tiver um nome de índice, não poderemos usar o $.
> countries <- c("country1" = "Canada", "country2" = "South Africa")
Vamos tentar recuperar “África do Sul” com $:
> countries$country2
Error in countries$country2 : $ operator is invalid for atomic vectors
Recebemos um erro, porque países é um vetor atômico. Nesse caso, temos que usar o nome ou número do índice:
> 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"
Espero que ajude!