R-ympäristöt Anacondalla

19.02.2020

R-ympäristöt Anacondalla

Itse tulee käytettyä sekä R:ää että Pythonia, niin työssä kuin koulutuksissakin. Kirjoitin aiemmin (osa 1) (osa 2) siitä miten näitä molempia kieliä on mahdollista käyttää ristiin samassa .Rmd tai .ipynb notebook-tiedostossa. Sittemmin on tullut mietittyä, miten R-paketteja voisi hallita samaan tapaan kuin Python-virtuaaliympäristöjä ja tämä kirjoitus käsitteleekin juuri tätä aihetta. Pitemmittä höpinöittä käydään suoraan asiaan.


Ympäristön pystytys

Olettaen että Anaconda (tai miniconda) on jo asennettu, helppo tapa päästä alkuun on luoda uusi R-ympäristö Anacondalla (Windowsilla Anaconda promptissa, muissa terminaalissa):

conda create -n r_env r-essentials r-base
conda activate r_env

conda create -n r_env r-essentials r-base -komento luo ympäristön ja asentaa sinne liudan hyödyllisiä paketteja. conda activate r_env -komento taas ottaa luodun ympäristön käyttöön, mikä on tarpeen jos halutaan esim. asentaa uusia paketteja.

R-pakettien asentaminen onnistuu seuraavasti:

conda install r-package_name

missä package_name on asennettavan paketin nimi. Tunniste r--pakettinimen edessä kertoo Anacondalle, että ollaan asentamassa R-pakettia, eikä Python-kirjastoa. Pakettien päivittäminen uudempiin versioihin onnistuu vastaavasti näin:

conda update r-package_name

Ympäristöön asennetut paketit saa näkyviin komennolla:

conda list

Oleellista on huomata, että listauksessa suuri osa paketeista on itseasiassa Python-kirjastoja. Miksi näin? Vähintäänkin siksi, että R:ää olisi mahdollista käyttää Jupyter-ympäristössä. Tätä varten ympäristöön on asennettu mm. python, jupyter ja ipykernel.


R ja Jupyter

Jotta R:n käyttö Jupyterissä onnistuisi, on kuitenkin vielä tehtävä pari juttua. Ensiksikin on asennettava IRkernel-paketti, joka tarjoaa Jupyterille R-kernelin (jokaiselle ohjelmointikielelle jota Jupeterissä haluaa käyttää on oltava oma kerneli). Asennus hoituu näin:

conda install r-irkernel

Tämän lisäksi pitää vielä käydä R:ssä ajamassa yksi komento, joka kertoo Jupyterille että R-kerneli on saatavilla. Avataan R komentorivillä komennolla R ja sitten suoritetaan:

IRkernel::installspec()
quit(save="no")

joista jälkimmäinen rivi sulkee R:n.


Rmarkdown tiedostojen käyttö

Entäpä sitten, jos haluaa ajaa olemassa olevia .Rmd tiedosatoja Jupyterissä? Sehän ei nimittäin sellaisenaan onnistu. Tätä ongelmaa on ilmeisesti joku miettinyt aikaisemminkin, sillä on saatavilla useita eri Python-kirjastoja, joilla voidaan kääntää .Rmd-formaatissa olevat notebook-tiedostot Jupyterin käyttämään .ipynb-formaattiin (itse kyllä tykkään paljon enemmän R-studiosta, mutta makunsa kullakin).

Omien kokeilujen perusteella voin suositella sos-markdow-kirjastoa, joka asentuu R-ympäristöön näin:

pip install sos-rmarkdown

ja sen jälkeen voidaankin kääntää haluttu .Rmd-tiedosto näin:

sos convert input.Rmd output.ipynb

Entäpä toiseen suuntaan? Tähänkin on olemassa monia eri ratkaisuita (enkä ole tutustunut läheskään kaikkiin) ja esittelen tässä yhden, joka osoittautui ainakin omassa systeemissäni toimivaksi. Ensin asennetaan kaksi Python-kirjastoa:

pip install nbrmd testfixtures

Lisäksi on mentävä lisäämään .jupyter/jupyter_notebook_config.py-tiedostoon uusi rivi:
c.NotebookApp.contents_manager_class = 'nbrmd.RmdFileContentsManager'

Omassa järjestelmässä avaan ko. tiedoston vaikka näin:

nano /Users/lasse/.jupyter/jupyter_notebook_config.py

Tämän jälkeen konvertointi onkin helppoa kuin hengittäminen (olen kokeillut, heinänteko ei ollut kovin helppoa):

nbrmd input.ipynb output.Rmd

Yllä esitettyyn sos-markdow-kirjastoon ei ainakaan vielä ole implementoitu .ipynb > .Rmd-konversiota, mutta nbrmd-kirjastolla tämä onnistuu:

nbrmd input.ipynb output.Rmd

Ympäristön jakaminen

R-ympäristön jakaminen onnistuu samaan tapaan kuin Python-ympäristölläkin. Voidaan esimerkiksi luoda .yml-tiedosto, joka sisältää tarvittavan informaation ympäristön replikoimiseksi:

conda env export > environment.yml

Sitten onkin helppo homma pystyttää sama ympäristö vaikka toiseen järjestelmään ajamalla seuraava komento:

conda env create -f environment.yml

Lopuksi

Jos olet päässyt tähän asti, pitäisi sinulla olla toimiva R-ympäristö käytössäsi. Lisäksi voit vapaasti liikkua notebook-tiedostojen kanssa Jupyterin ja R-studion välillä, mikäli sille on tarvetta.

Toivottavasti tämä kirjoitus on ollut avuksi, sikäli kun ko. asian kanssa on ollut ongelmia. Mikäli jokin kohta ei toimi niinkuin pitäisi, otan mieluusti vastaan kommentteja ja parannusehdotuksia.

Ainiin, mikäli haluat eroon R-ympäristöstä, pitäisi riittää kun ajat seuraavan komennon (ja korvaat r_env oman ympäristösi nimellä):

Lisää tietoa Anaconda ympäristöjen hallinnasta löytyy täältä.

Share
Contact Person

Bloggaaja

Lasse Ruokolainen

AI lead