JAK PROPOJIT R-KO a EXCEL aneb Aby se uˇzivatel nasytil a statistik z˚ ustal cel´y Ondˇrej Venc´alek
listopad 2008
Motivace
Jak to udˇelat, aby se panu doktorovi uˇsetˇrila pr´ace, a pˇritom aby se nemusel uˇcit R-ko?
RExcelInstaller - co si pˇreˇctete
RExcelInstaller - co udˇel´ate
I
I
st´anete bal´ıˇcky Rcmdr, rcom a RExcelInstaller (automaticky se st´ahne jeˇstˇe nˇekolik dalˇs´ıch potˇrebn´ych bal´ıˇck˚ u) bal´ıˇcek RExcelInstaller obsahuje jen dvˇe funkce. Z prostˇred´ı R-ka volejte funkci installRExcel(mySite="http://rcom.univie.ac.at") (viz pˇriloˇzen´y pdf soubor). Druh´a funkce upravuje probl´emy pˇri vol´an´ı html n´apovˇedy, je-li defaultn´ım prohl´ıˇzeˇcem Firefox.
Excel - u´vod
I I I
D´ale uˇz pracujete s Excelem. V hlavn´ım menu pˇribyla poloˇzka RExcel. K pochopen´ı moˇznost´ı pom˚ uˇze nov´aˇckovi nˇekolik demo-file-˚ u.
Excel - u´vod
Excel - u´vod
Jsou dva hlavn´ı zp˚ usoby, jak vyuˇz´ıt propojen´ı R-ka a Excelu: I Prvn´ ım je pr´ace v Excelu s online vol´an´ım funkc´ı R-ka. I Druh´ ym je vytvoˇren´ı makra, kter´e bude volat funkce z R-ka. Tento zp˚ usob mˇe zaj´ımal, protoˇze uˇzivatel bude uˇz´ıvat makra bez toho, ˇze by potˇreboval porozumˇet princip˚ um spojen´ı Excelu a R-ka natoˇz aby se musel uˇcit jeˇstˇe nˇejak´e nov´e funkce.
Excel - makra
Co je to makro? Wikipedie odpov´ıd´ a: Makro (software) je posloupnost funkc´ı resp. pˇr´ıkaz˚ u, kter´e usnadˇ nuj´ı urˇcitou ˇcinnost. Zn´am´a jsou makra v programech Microsoft Word a Microsoft Excel. Pouˇz´ıvaj´ı se vˇetˇsinou jako posloupnost krok˚ u pˇri v´ypoˇctech a zpracov´an´ı namˇeˇren´ych veliˇcin.
Excel - makra
Excel - makra
Otevˇrete-li si nejprve demo - Writing macros a teprve potom otevˇrete editor jazyka Visual Basic, m˚ uˇzete si prohl´ednout jiˇz existuj´ıc´ı makra. Postupnˇe si ˇrekneme nˇeco o tˇrech poloˇzk´ach v nab´ıdce Project VBAProject (vlevo nahoˇre): I MS Excel Objects - This Workbook I References I Modules
Excel - makra
Excel - makra - This Workbook
I
I I
“Rozkliknˇeme” poloˇzku This Workbook, objev´ı se prostor pro obecn´e deklarace t´ykaj´ıc´ı se cel´eho seˇsitu. Doporuˇcuju “ukr´ast” toto nastaven´ı z dema - funguje pˇeknˇe. Je nutno jeˇstˇe v nab´ıdce Properties - This Workbook nastavit hodnotu AcceptLabelsInFormulas na TRUE.
Excel - makra - References
Aby bylo moˇzno pouˇz´ıvat v makrech R-ka, je nutn´e nastavit v nab´ıdce Tool - References poloˇzku RExcelVBAlib. Zaˇskrtnˇete ji!
Excel - makra - Modules
Samotn´y progr´amek se pak p´ıˇse v tzv. modulech. Pˇrid´an´ı modulu: Insert - Module je snadn´e. Hlaviˇcka vypad´a n´asledovnˇe: Public ServerActiveAtStart As Boolean Samotn´a procedura vypad´a takto: Sub Mojeprocedura() ... End Sub
Excel - makra - Modules - pˇr´ıkazy
Ne-R-kovsk´e pˇr´ıkazy: I Worksheets("List2").Activate slouˇz´ı k pˇrepnut´ı na jin´y list seˇsitu I MsgBox "Vzkaz pro uˇ zivatele" Vyskakovac´ı okno informuj´ıc´ı uˇzivatele
Excel - makra - Modules - pˇr´ıkazy R-kovsk´e pˇr´ıkazy: I RInterface.StartRServer pˇr´ıkaz pro spuˇstˇen´ı R-ka I RInterface.PutArray "rok", Range("List2!B1") vstup z Excelu do R-ka v uvozovk´ach n´azev promˇenn´e, Range ud´av´a buˇ nku, odkud se naˇc´ıt´a I RInterface.RRun "source(’SMR-vypocet.R’)" spuˇstˇen´ı R-kovsk´eho k´ odu v z´avorce je nutno pouˇz´ıt jednoduch´ych uvozovek! I RInterface.GetArray "celkem", Range("List2!B5") v´ystup z R-ka do Excelu v uvozovk´ach n´azev promˇenn´e, Range ud´av´a buˇ nku, kam se zapisuje pokud je v´ystupem tabulka, uˇzijeme RInterface.GetDataframe
Excel - makra - Modules - pozn´amka
Pokud pouˇzijete pˇr´ıkazu source(’priklad.R’), m˚ uˇze tento mj. obsahovat naˇcten´ı dat z extern´ıho souboru. Pokud pˇri naˇc´ıt´an´ı nen´ı uvedena cel´a cesta, je nutno zmˇenit pracovn´ı adres´aˇr. K tomu v R-ku slouˇz´ı pˇr´ıkaz setwd(). Jm´eno pracovn´ıho adres´aˇre je moˇzno zadat v excelovsk´e tabulce a pak ho naˇc´ıst a pouˇz´ıt. K´ od by vypadal n´asledovnˇe: RInterface.PutArray "a", Range("List1!A4") RInterface.RRun "setwd (a)"
Excel - makra - Modules - tlaˇc´ıtka
K usnadnˇen´ı spouˇstˇen´ı makra m˚ uˇzete pro uˇzivatele vytvoˇrit klikac´ı tlaˇc´ıtka. Tvorba je jednoduch´a - p˚ ujˇc´ıte si vzorov´e procedury CreateToolbar() a DestroyToolbar() obsaˇzen´e v demu pro tvorbu maker. Upravit n´azvy a popisky zvl´adne kaˇzd´y.
Excel - dalˇs´ı lah˚ udky
Docela hezk´e je d´at uˇzivateli moˇznost vybrat si pohodlnˇe z nab´ıdky nˇekolika moˇznost´ı (a t´ım mu z´aroveˇ n nedovolit, aby si vyplˇ noval, co se mu zl´ıb´ı). Viz ilustraˇcn´ı obr´azek:
Excel - dalˇs´ı lah˚ udky I
I
I
Nejprve si tˇreba na vedlejˇs´ım listu nap´ıˇseme vˇsechny moˇznosti, kter´e uˇzivateli nab´ıdneme. Napˇr´ıklad pro faktor pohlav´ı moˇznosti ˇzena, muˇz, bez rozliˇsen´ı, pro faktor kouˇren´ı moˇznosti kuˇr´ak, nekuˇr´ak, exkuˇr´ak, bez rozliˇsen´ı ap. Moˇznost bez rozliˇsen´ı urˇcuje, ˇze v anal´yze dan´y faktor nem´ame zohledˇ novat. Oznaˇc´ıme buˇ nky, kde jsou uvedeny moˇznosti dan´eho faktoru. Napˇr. oblast A1:A3 a tuto oblast pojmenujeme: Vloˇ zit - N´ azev - Definovat Pojmenujme ji tˇreba faktorPohlavi Vrat’me se k buˇ nce, kde budeme cht´ıt d´at uˇzivateli na v´ybˇer. Oznaˇcme tuto buˇ nku kurzorem a z nab´ıdky Data vyberme poloˇzku Ovˇ eˇ ren´ ı... V oknˇe, kter´e se otevˇre mˇen´ıme Nastaven´ ı a to tak, ˇze v nab´ıdce Povolit zvol´ıme Seznam a v kolonce Zdroj pak uvedeme =faktorPohlavi. Nezapomeˇ nte na to rovn´ıtko!
Excel - dalˇs´ı lah˚ udky
To, co uˇzivatel t´ımto zp˚ usobem zad´a, m˚ uˇze b´yt pro n´as vstupn´ı promˇennou do R-kovsk´e procedury. V´yhodou je, ˇze se nemus´ıme ob´avat, ˇze by uˇzivatel zadal nˇeco, co neˇcek´ame :)
Z´avˇer
Na z´avˇer spust’me uk´azku toho, jak m˚ uˇze vypadat fin´aln´ı (nebo ˇc´asteˇcn´y?) produkt naˇseho snaˇzen´ı ...