Paras vastaus
Uskon, että tämä tarina ei ole anekdootti. Kuten jokainen sanoi, että R perustuu S: ään ja arvaan, että S tarkoittaa tilastokieliä ja S oli avoimen lähdekielen kieli. Nähdessään S: n kasvavan merkityksen IBM halusi hankkia sen, mutta osa S: n ydinryhmästä halusi pitää sen avoimena lähdekoodina ja loput suostui IBM: n ehdotukseen. Myöhemmin IBM: n hankkimasta osasta tuli S-plus ja avoimen lähdekoodin yhteisö kukoisti ja teki paljon lisäyksiä S: ään, joka lopulta nimettiin uudelleen nimellä R.
Vastaus
Ei ole koskaan pakollista käyttää $ viitattaessa R: ään, mutta se tekee viittaamisen helpoksi monissa tapauksissa. R: n dollaria R käytetään yleensä viitattaessa nimettyyn objektiin suuremmassa dataobjektissa. Tätä voidaan soveltaa kohteisiin, kuten luetteloihin ja datakehyksiin.
Esimerkki
Luodaan ensin luettelo, joka sisältää joitain satunnaisia tietoja:
random <- list("numbers" = c(1, 2, 3), "places" = list("countries" = c("Canada", "South Africa"), "cities" = c("Vancouver", "Cape Town")))
Tämä on satunnaisluettelomme rakenne:
> random
$numbers
[1] 1 2 3
$places
$places$countries
[1] "Canada" "South Africa"
$places$cities
[1] "Vancouver" "Cape Town"
Voimme viitata luettelon eri kohteisiin täsmälleen samalla tavalla kuin yllä olevassa rakenteessa. Jos esimerkiksi haluamme koko paikkaluettelon, joka sisältää maa- ja kaupunkitiedot, voimme viitata siihen seuraavasti:
> random$places
$countries
[1] "Canada" "South Africa"
$cities
[1] "Vancouver" "Cape Town"
Jos haluamme vain maiden nimet, voimme porautua alaspäin luetteloon $: lla:
random$places$countries
[1] "Canada" "South Africa"
Muista, että ei voi käyttää $ viitatessaan atomivektoreihin (vektorit, jotka sisältävät yksittäisiä arvoja, kuten numeroita tai merkkijonoja). Esimerkiksi yllä olevat maiden nimet tallennetaan atomivektoriin. Meidän on käytettävä hakemistonimeä tai numeroa yksittäisen maan hakemiseen:
> random$places$countries[2]
[1] "South Africa"
Vaikka maalla olisi hakemistonimi, emme voi käyttää dollaria.
> countries <- c("country1" = "Canada", "country2" = "South Africa")
Yritetään hakea "Etelä-Afrikka" $: lla:
> countries$country2
Error in countries$country2 : $ operator is invalid for atomic vectors
Saamme virheen, koska maat ovat atomivektori. Tässä tapauksessa meidän on käytettävä hakemistonimeä tai numeroa:
> 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"
Toivottavasti tämä auttaa!