Nejlepší odpověď
Věřím, že tento příběh není anekdotický. Jak každý řekl, R je založen na S a hádám, že S znamená statistický jazyk a S byl jazyk otevřeného zdroje. Vidět rostoucí význam společnosti S IBM ji chtěla získat, ale část hlavního týmu společnosti S ji chtěla ponechat jako otevřený zdroj a zbývající část souhlasila s návrhem IBM. Později se část získaná IBM stala S-plus a komunita open source prosperovala a udělala mnoho doplňků k S a které se nakonec přejmenovaly na R.
Odpověď
Nikdy není povinné používat $ při odkazování v R, ale v mnoha případech je odkazování snadné. $ V R se obvykle používá při odkazování na pojmenovaný objekt v rámci většího datového objektu. To lze použít na objekty, jako jsou seznamy a datové rámce.
Příklad
Nejprve vytvořme seznam obsahující náhodné informace:
random <- list("numbers" = c(1, 2, 3), "places" = list("countries" = c("Canada", "South Africa"), "cities" = c("Vancouver", "Cape Town")))
Toto je struktura našeho náhodného seznamu:
> random
$numbers
[1] 1 2 3
$places
$places$countries
[1] "Canada" "South Africa"
$places$cities
[1] "Vancouver" "Cape Town"
Na různé položky v seznamu můžeme odkazovat přesně stejným způsobem, jak je uvedeno ve struktuře výše. Například pokud chceme celý seznam „míst“, který obsahuje informace o zemi a městě, můžeme na něj odkazovat takto:
> random$places
$countries
[1] "Canada" "South Africa"
$cities
[1] "Vancouver" "Cape Town"
Pokud chceme pouze názvy zemí, můžeme pomocí $ přejít do seznamu dále:
random$places$countries
[1] "Canada" "South Africa"
Mějte na paměti, nemůže použít $ při odkazování na atomové vektory (vektory, které obsahují jednotlivé hodnoty, jako jsou čísla nebo řetězce znaků). Například výše uvedené názvy zemí jsou uloženy v atomovém vektoru. K načtení jedné země musíme použít název nebo číslo rejstříku:
> random$places$countries[2]
[1] "South Africa"
I kdyby země měla indexový název, nebudeme moci používat $.
> countries <- c("country1" = "Canada", "country2" = "South Africa")
Zkusme načíst „Jihoafrickou republiku“ pomocí $:
> countries$country2
Error in countries$country2 : $ operator is invalid for atomic vectors
Zobrazuje se chyba, protože země je atomový vektor. V tomto případě musíme použít název nebo číslo indexu:
> 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"
Doufám, že to pomůže!