TECHNICKÁ POZNÁMKA # 1-2012:

Programovací jazyk R

 

Programovací jazyk R byl vyvinut jako free verze komerčně dostupného statistického jazyka S. Původně byl jazyk R používán pouze v malé akademické komunitě jako náhrada jazyka S k vývoji speciálních matematických metod a k výuce studentů. Dnes se však díky dostupnosti zdarma, širokému výběru instalačních verzí pro běžné i relativně vzácné operační systémy a neomezené možnosti rozšiřování funkcí o stále nové stažitelné softwarové moduly i vlastnoručně programované funkce, stává jedním z nejpopulárnějších a téměř již standardních programovacích jazyků pro provádění obecné i specializované statistické analýzy na triviálních i programově/výpočetně vysoce náročných problémech v akademické i aplikované doméně. 
 
Jazyk R se dnes běžně využívá i v nematematických vědách, proniká do mezioborových oblastí, kde přírodní/technické vědy hraničí s matematikou, především statistikou, a vznikají oborově zaměřené databáze stažitelných softwarových modulů. Pro aplikace v biologii je to například projekt Bioconductor, kde jsou k dispozici stovky volně stažitelných softwarových balíčků, které lze použít k analýze dat z DNA/RNA mikroerejí, analýzu DNA a RNA sekvencí, dat z real-time PCR, průtokové cytometrie atd. 
 
Jaké jsou výhody jazyka R:
 
  • zdarma
  • integrované vývojové prostředí (IDE) je také zdarma
  • zdarma stažitelné, dodatečné softwarové balíčky (R library, R package) obsahují tisícovky metod a funkcí, které prošly základní peer review při své primární publikaci a které jsou pod neustálým dozorem praktických uživatelů i akademických expertů, což mimo jiné znamená okamžitou korekci a aktualizaci problematických partií kódu
  • výborná čitelnost kódu (viz poznámku níže)
  • reprodukovatelnost analýzy na základě záznamu kódu a verze jazyka podle záznamu skriptu
  • kód každé funkce je na rozdíl od komerčně dostupných softwarů přístupný, lze si ho prohlížet a jeho části testovat přímo v IDE, takže je vyloučena nutnost slepé aplikace předpřipravených funkcí s nemožností zjistit, zda metoda neobsahuje nevhodné kroky
  • bohatá dokumentace, včetně primárního odborného článku, popisujícího prvotní způsob použití vyvinutého kódu na reálných datech
  • celý kód nebo části kódu jakékoli funkce lze volně kopírovat, kombinovat s ručně psaným kódem a jako nové funkce nahrávat do IDE
  • možnost kombinace s kódem jiných programovacích jazyků (linux shell, PERL, Python...)
 
Nevýhody jazyka R pro běžného uživatele:
 
  • nutnost hlubší znalosti operačního systému, v kterém se jazyk R instaluje a používá
  • časová náročnost praktického ovládnutí tohoto jazyka je srovnatelná s náročností ovládnutí běžného přirozeného lidského (cizího) jazyka
  • časově náročné je také studium dokumentace k existujícím funkcím a studium primární literatury, která popisuje prvotní způsob použití vyvinutého kódu na reálných datech
  • téměř každá aplikace vyžaduje sepsání alespoň několika (desítek) řádků základního vlastnoručního kódu, který slouží pro import primárních dat a postupnou aplikaci jednotlivých funkcí na tato data a nastavení parametrů těchto funkcí
  • kontextově závislý převod (koerze) datových typů
  • pomalejší exekuce kódu - kód psaný v jazyce R je optimalizován funkčně, ne však rychlostně, což vyplývá z charakteru jazyka R jakožto vyššího programovacího jazyka (viz poznámku níže)
 
Co vám nabízíme:
 
  • mnohaleté zkušenosti s použitím a vlastnoručním psaním kódu statistického jazyka R 
  • bohatá in-house databáze bioinformatických analytických skriptů standardizovaných intenzivním testováním na vzorových testovacích datech
  • schopnost vyhledat a vhodně zvolit balíčky jazyka R, případně publikovaný kód v primárních odborných článcích, kde byl tento kód specificky vyvinut a použit pro váš unikátní biologický problém a prošel kritickou kontrolou v peer review odborném časopise
  • schopnost portovat publikované matematické metody do jazyka R a vytvářet programatické pipeliny pro (semi)automatické procesování specifického typu dat
  • schopnost korigovat a kompilovat publikovaný i vlastnoručně psaný R kód a správnou funkci nově vzniklého kódu extenzivně ověřit na standardních vzorových testovacích datech, která jsou přístupná v primárních odborných článcích, případně na simulovaných datech
  • schopnost extrahovat bohatou biologickou anotaci, která je klíčová při interpretaci získaných výsledků statisticky významných nálezů - specializované anotační balíčky jsou přítomné přímo v jazyce R, anotační balíčky umíme dle specifických přání zákazníka programaticky extrahovat z veřejných (např. NCBI, UCSC, Ensembl, GO, Biomart, KEGG) i placených (Metacore TM) biomedicinských databázích
  • odborné zázemí - tým externích odborných konzultantů s různým typem a stupněm expertízy v biomedicínském výzkumu a statistice
 
S jakými analýzami máme z minulosti zkušenost:
 
  • DNA/RNA mikroereje
  • kvantitativní real-time PCR
  • next gen sekvenování
 
Poznámka:
 
Základním elementem uživatelského rozhraní jazyka R je příkazová řádka, která slouží k zadávání příkazů, složených z funkcí, jejich argumentů a parametrů, které jazyk R interpretuje na základě kódu dané funkce. Vzhled uživatelského rozhraní jazyka R a grafické možnosti byly původně omezené, ale dnes je k použití a testování veřejně publikovaného kódu i vlastnoručně psaného kódu k dispozici tzv. integrované vývojové prostředí (IDE) ve formě RStudia, které napomáhá v psaní, kompilaci a aplikaci kódu na data - tedy vlastní výpočetní operaci. Kvalita produkce grafických výstupů z analýzy je už také srovnatelná s komerčními softwary, je pouze časově náročnější.
Statistický jazyk R je sám o sobě napsán převážně v programovacích jazycích C a Fortran (a samotném jazyce R), jedná se tedy o tzv. vyšší programovací jazyk, což ovšem neznamená, že by byl funkčně nadřazený jazyku C a Fortran. Naopak, vše, co lze naprogramovat v jazyce R, lze naprogramovat také v jazycích C a Fortran. Ale opačně tento vztah již neplatí. Jazyky C a Fortran jsou nižšími programovacími jazyky ne proto, že by byly méněcenné, ale proto, že jsou to nízkoúrovňové programovací jazyky, které jsou samy o sobě univerzálními programovacími jazyky, které jsou už napsané v tzv. strojovém (tedy nejnižším možném) programovacím jazyce, který již umožňuje převod instrukcí na pokyny pro specifický hardware (typ procesoru, paměti atd.) daného výpočetního zařízení (počítače). Nízkoúrovňové jazyky tedy převádí víceméně přirozený, běžnou matematickou a jazykově-logickou symbolikou formulovaný problém v jazyce R na sadu instrukcí, které se zasílají do procesoru, paměti a dalších součástí počítače. Přímý přístup nízkoúrovňových jazyků přirozeně znamená, že exekuce stejné funkce v nich je obvykle rychlejší než v jazyce vysokoúrovňovém. Na duhou stranu naprogramování stejného výpočtu v jazyce R zabere menší množství řádků kódu, protože funkce v R "skrývají" již předprogramovaný kód C nebo Fortran, který je stejně jako vlastní R kód open source, je tedy veřejně přístupný, jelikož lze stáhnout kompletní zdrojový kód jazyka R, ovšem jeho modifikování je v běžné praxi omezeno pouze na ústřední tým vývojářů jazyka R. Další nespornou výhodou je výše zmíněná struktura jazyka R, která je bližší přirozeným lidským jazykům a matematické symbolice, což zvyšuje čitelnost kódu a urychluje a usnadňuje učení jazyka R bioinformatikům. Na druhou stranu, jazyk R je (hybridním) objektově orientovaným a procedurálním programovacím jazykem, který, kromě využití rutin a subrutin aplikovaných na objekty, obsahuje bežné programovací metody jako jiné programovací jazyky, tedy možnost psaní kódu kombinací podmíněných programovacích konstruktů a iterativních smyček.
 
rb