Wprowadzenie do Sweave
Transkrypt
Wprowadzenie do Sweave
Wprowadzenie do Sweave mgr inż. Piotr Kowalski 16 maja 2012 1 Streszczenie Krótkie wprowadzenie do używania Sweave, pakietu umożliwiajacego , polaczenie platformy obliczeń statycznych R-cran oraz dokumentów Latex , 1 Lista wersji Wersja 0.1 - 8.04.2012 - Kowalski Piotr - pierwsza wersja dokumentu, wymagajaca dalszych uzupelnień oraz testów na Windows , Wersja 0.2 - 13.04.2012 - Kowalski Piotr - druga wersja z uzupelniona, instalacja, dla systemów Windows Wersja 0.3 - 20.04.2012 - Kowalski Piotr - trzecia wersja z dorzuconymi zrzutami ekranu z instalacji w Windows7. Wersja 1.0 - 16.05.2012 - Kowalski Piotr - czwarta wersja, zamykajaca pierw, sze prace nad dokumentem. Uzupelniono tworzenie grafiki w Sweave oraz importowanie jej do Latexa. Dolaczono również kod prezentacji Sweave , 2 Spis treści 1 Czym jest Sweave 4 2 Instalacja Sweave 2.1 Automatyzacja kompilacji Sweave . . . . . . . . . . 2.1.1 Automatyzacja kompilacji dla TEXMaker . . 2.1.2 Automatyzja kompilacji dla Miktex 2.9, LEd mie Windows . . . . . . . . . . . . . . . . . . 2.2 Zasada dzialania Sweave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . na platfor. . . . . . . . . . . . . . 3 Programowanie w Sweave 3.1 Podstawowy blok Sweave . . . . 3.1.1 Parametry bloku . . . . . 3.2 Blok linijkowy Sweave . . . . . . 3.3 Powtarzanie bloków . . . . . . . 3.4 Ukrywanie fragmentu kodu przed 3.5 Grafika w Sweave . . . . . . . . . 3.5.1 Etykietowanie + grafika . 3.5.2 Opcje eksportu grafiki . . . . . . . . . . . . . . . . . . . . . . Sweave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 10 11 11 12 12 13 13 4 Przyklady 4.1 Przykladowy plik rnw . . . 4.1.1 Plik bibliografia.bib 4.2 Przykladowy plik tex . . . . 4.3 Prezentacja Sweave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 23 23 30 . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . 4 4 4 5 9 1 Czym jest Sweave Sweave jest narzedziem do generowania plików tex zawierajacych obliczenia, , , grafiki i wiele innych obiektów wytworzonych przez przez pakiet R. Umożliwia dynamiczne tworzenie raportów i jest przykladem tzw. ” programowania 1 objaśniajacego” . Dla nas jest to jednak sposób na stworzenie inteligentnego , dokumentu, który potrafi generować losowości i liczyć dla nas wyniki. Jest to również narzedzie pozwalajace , , na proste wstrzykiwanie skomplikowanych grafik i wykresów do fachowo zlożonych dokumentów LATEX. W poniższym instruktażu zakladam milczaco, że użytkownik posiada pod, stawowa, znajomość zarówno pakietu R jak i jezyka LATEX. Podobnie zalożone , jest posiadanie zainstalowanej lokalnie instancji pakietu R oraz posiadanie środowiska i edytora do pisania dokumentów TEX. 2 Instalacja Sweave W stan obecny pakiet Sweave stanowi wbudowana, cześć pakietu R-cran i jest , domyślnie z nim instalowany. W przypadku systemów unixowych po instalacji utworzony powinien zostać skrypt w /usr/bin/R co czyni go ogólnodostepnym , dla innych programów w systemie. W przypadku systemów z rodziny Windows, podobne powinno zostać zrealizowane poprzez dolaczenie folderu bin z pakietu , R to zmiennej globalnej PATH. W przypadku, gdy takie dopisanie nie zostalo zrealizowane, zaleca sie, przeprowadzenie tego recznie. , W przypadku instalacji na Windows należy jeszcze dolaczyć pakiet stylu do , źródel kompilacyjnych Latexa. 2.1 Automatyzacja kompilacji Sweave W zależności od, stosowanego przez użytkownika, edytora LATEXróżnie przebiega proces uruchomienia automatycznego generowanie plików pdf w sposób automatyczny. W skrócie sprowadza sie, to zdefiniowania wlasnej komendy kompilacji, która powinna wygladać mniej wiecej w sposób nastepuj acy: , , , , R CMD Sweave %.rnw Zaprezentowana powyżej komenda powinna dzialać w wiekszości systemów uni, xowych i w dowolnym z edytorów. Sprawdzenia użyto z wykorzystaniem edytora TEXMaker 3.0.2 oraz: $ tex --version TeX 3.1415926 (TeX Live 2009/Debian) 2.1.1 Automatyzacja kompilacji dla TEXMaker Miejscem przeznaczonym do umieszczenia komendy jest panel komend użytkownika znajdujacy sie, w menu User->User commands -> Edit user commands. , Zgodnie z możliwościami programu komenda to może zostać rozwinieta tak, aby , obslużyć calość procesu tworzenia dokumentu co można obserwować poniżej.2 1 ang. literate programming jest lekka, przegladark a, plików pdf , 2 evince 4 R CMD Sweave %.rnw | pdflatex -synctex=1 -interaction=nonstopmode %.tex | evince %.pdf Rysunek 1: Konfiguracja Sweave dla texmaker 2.1.2 Automatyzja kompilacji dla Miktex 2.9, LEd na platformie Windows Proces ustanowienia automatyzacji jest bardziej skomplikowany na systemach Windows. Prezentowane jest tutaj rozwiazanie dla popularnego duetu Latexo, wego czyli Miktex+LEd. Proces tej automatyzacji jest trzy krokowy i powinien wygladać podobnie dla innych środowisk kompilacji LATEX. , Udostepnie pakietu R w linii komend , Aby proces kompilacji mógl wykorzystać R, aplikacja ta musi być dobrze rozpoznawana w calym systemie operacyjnym. Aby sprawdzić czy tak faktycznie jest wystarczy uruchomić program linii komend i wpisać w nim R + enter. Jeśli program jest dobrze znany, to powinien sie, uruchomić i w linii komend powinna być możliwość wykonywana poleceń jego jezyka. Jeśli natomiast pojawi sie, komuni, kat, że ta nazwa/program nie jest znany, to opisuje tutaj sposób naprawienia tego faktu. Najpierw należy odszukać ścieżke, do podkatalogu bin znajdujacego sie, w , katalogu z instalacja, R. Domyślnie ma ona postać ”C:\\Program Files\R\RX.XX.X\bin”. Trzeba nakazać programom zapoznać sie, z programami tam znajdujacymi sie. , , W systemach Windows istnieje specjalny zestaw zmiennych, które sa, dostepne do odczytu wszystkim programom w systemie operacyjnym. Sa, to , tzw. zmienne środowiskowe. Wśród tych zmiennych jest jedna z nich nazywana PATH, i zawiera ona wszystkie katalogi w których znajduja, sie, programy, które maja, być dostepne dla wszystkich innych programów. , Aby otrzymać dostep , do zmiennych środowiskowych należy kliknać , PPM na ikone, Mój komputer i przejść do wlaściwości. Wyświetli sie, okno 2. W zaawansowanych ustawieniach systemu odszukać przycisk zmiennych środowiskowych (ang. enviromental variables) jak na obrazie 3 . W nastepnej kolejności nale, ży odszukać zmienna, PATH i kliknać jej edycj e. UWAGA. Nie należy niczego , , kasować z tej zmiennej. Usuniecie jej zawartości może spowodować uszkodze, nie systemu operacyjnego. Należy na końcu wartości tej zmiennej (obrazek 4) 5 Rysunek 2: Zaawansowane ustawienia systemu w Win7 postawić znak ’;’ oraz wkleić ścieżke, do katalogu bin. Oznacza to, że na koniec zmiennej PATH powinien zostać doklejony frgament o postaci np. ;C:\\Program Files\R\R-X.XX.X\bin . Po zakończeniu edycji należy zapisać wartość zmiennej i dokonać sprawdzenia w nowo otwartym oknie linii komend sprawdzajac, , tak jak na poczatku, czy program R stal sie, widoczny w systemie. , Import skladni Sweave W procesie kompilacji pliku tex, kompilator Latexa wymagać Cie, bedzie infor, macji o skladni zwiazanej z pakietem Sweave. W naszym wypadku tym kompila, torem jest platforma Miktex. Musimy zatem poinformować platforme, gdzie może odszukać ona plik Sweave.sty. Zwyczajowo ścieżka ta ma postać ” C:\\Program Files\R\R-2.15.0\share\texmf ”. Należy uruchomić Miktex(Admin) -> Settings i w drugiej zakladce zawierajacej ”katalogi zarzadzane przez Miktex” dodać no, , wy o ścieżce podobnej do powyższej (patrz rysunek 5). Po zapisaniu ustawień styl Sweave.sty powinien być dostepny w procesie kompilacji latex. , Automatyczny skrypt kompilacji Podobnie jak TEXMaker również i LEd udostepnia wlasne skrypty kompilacyjne. , Po lewo na pasku znajduje sie, 5 kolejnych przycisków o nazwie U. Po najechaniu na nie pojawia sie, informacja, że wciśniecie przycisku powoduje wykonanie pliku userX.bat , gdzie pod X jest liczba od 1 do 5. To wlaśnie jeden z tych skryptów powinien zostać użyty do wykonywania naszego procesu kompilacji. Poniżej podaje postać tego skryptu cd %1 6 Rysunek 3: Zmienne środowiskowe systemu w Win7 Rysunek 4: Zmienne środowiskowe systemu w Win7 7 Rysunek 5: Zmienne środowiskowe systemu w Win7 8 Sweave %.rnw %.rnw pdflatex %.tex - %.tex - %.pdf Rysunek 6: Proces kompilacji Sweave R CMD Sweave %2.rnw pdflatex.exe %2.tex Pod %1 ukrywa sie, katalog w którym znajduje sie, plik źródlowy, pod %2 natomiast jego nazwa bez rozszerzenia. Aby zautomatyzować proces kompilacji w LEd należy powyższa, treść umieścić w pliku np. user1.bat, który znajduje sie, domyślnie w katalogu: ”C:\\Program Files\LEd\Batches. Po wykonaniu tego pod odpowiednim przyciskiem U odbywać sie, bedzie proces kompilacji , Sweave+pdflatex. UWAGA. W systemach Windows Vista oraz późniejszych nie można bezpośrednio edytować, a dokladniej zapisywać, do plików systemowych. W takim wypadku należy plik userX.bat przenieść np. na swój pulpit, edytować a dopiero nastepnie przenieść go z powrotem do katalogu Batches. , 2.2 Zasada dzialania Sweave Poniższy diagram prezentuje zasade, dzialania procesu kompilacji dokumentu Rnw zawierajacego kod dla pakietu Sweave. W pierwszej cześci procesu plik , , rnw. tlumaczony jest na plik TEXowski oraz eksportowane sa, wszystkie wykresy. W dalszej cześci nastepuje kompilacja programu pdflatex. Calość prezentuje , , diagram 6 3 Programowanie w Sweave W tej cześci skupimy sie, na umówieniu bloków Sweave. Wszystko co nie jest , blokiem Sweave jest przez pierwszy proces kompilacji zwyczajnie kopiowane do pliku .tex. Plik .rnw po prawdzie nie różni sie, niczym od zwyczajnego dokumentu LATEXgdyby nie dolaczone wstawki. Proces tworzenia takiego dokumentu należy , zaczać podobnie jak w przypadku pisania zwyczajnego pliku latexowego. , 3.1 Podstawowy blok Sweave W Sweave do tworzenia bloków używa sie, specjalnego rodzaju bloku wyglada, jacego nastepuj aco , , , <<name>> R-code @ W miejscu name umieścić można zarówno nazwe, wlasna, dla bloku jak i szereg parametrów Na przyklad: 9 echo fig eval results engine split label TRUE-pokazuje komende, wykonania, FALSE - ukrywaja, TRUE-przekazuje wykres do umieszczenia - FALSE - ukrywa wykresy ustala czy wyniki sa, obliczane opcje: verbatim,tex,hide - to różne tryby wyświetlania ustala narzedzie do przetwarzania w Sweave: S, R, S3 or S4 , ustala podzial pliku wynikowego, wartość TRUE oznacza istnienie podzialu podaje nazwe, pliku wynikowego, jest również etykieta, dla bloku Tabela 1: Podsumowanie parametrów bloku <<>>= x=c(1,2,3) x^2 @ Wyprodukuje > x=c(1,2,3) > x^2 [1] 1 4 9 W bloku można wykonywać dowolne komendy jezyka R. W miare, rozwo, ju tego dokumentu obserwować bedziemy, że użycie niektórych wyników jest , trudniejsze niż reszty. 3.1.1 Parametry bloku Blok może posiadać wiele różnych parametrów, zebranych w tabeli 1. Pokażemy to na przykladzie poniższego kodu: <<param=value>>= x=c(1,2,3) x @ Przy wlaczonym echo: , > x=c(1,2,3) > x [1] 1 2 3 i wylaczonym: , [1] 1 2 3 Przy wlaczonym eval: , > x=c(1,2,3) > x [1] 1 2 3 10 i wylaczonym: , > x=c(1,2,3) > x Przy results verbatim: > x=c(1,2,3) > x [1] 1 2 3 results tex: > x=c(1,2,3) > x [1] 1 2 3 results hide: > x=c(1,2,3) > x [1] 1 2 3 3.2 Blok linijkowy Sweave Możliwe jest również używanie R do wypelniania tekstów linijkowych. Np. Pier√ wiastek z 2: 2 = 1.4142135623731. do wykonania tego potrzebny jest blok \Sexpr{·}. Blok ten wyświetla zawsze pojedynczy element, pierwszy w wektorze odpowiedzi. Dla sygnalu \Sexpr{c(1, 2, 3)} otrzymujemy bowien 1 3.3 Powtarzanie bloków Użycie konstrukcji <<>>= Jest niczym innym jak przypisaniem. Standardowy blok jest anonimowy. Można jednak nadać im nazwy. <<A>>= x=c(1,2,3) @ > x=c(1,2,3) Najważniejsza, zaleta, tego rozwiazania jest możliwość wielokrotnego użycia tych , samych bloków <<>>= <<A>> <<A>> @ > x=c(1,2,3) > x=c(1,2,3) 11 3.4 Ukrywanie fragmentu kodu przed Sweave Skomplikowanym procesem jest ukrywanie kawalków pliku przed byciem przeprocesowanym przez Sweave. Okazuje sie, jednak, że jest prosty sposób na ukrycie fragmentów kodu przed byciem przegladanym przez Sweave. Wystarczy ukryć , je w innym pliku. Sweave procesuje jedynie pojedynczy plik, wiec , jeśli niechcemy aby jakiś fragment naszego nie bral w nim udzialu wystarczy umieścić go w osobnym pliku i kazać latexowi użyć go w nastepnym etapie , \input{ukryte1} gdzie plik ukryte1.tex zawiera rzeczy nie procesowane przez Sweave. Kiedy należaloby zadbać o nie procesowanie takiego fragmentu? Np. gdy móglby zawierać bloki Sweave, które nie powinny być interpretowane. Sweave ponadto czesto nadmiernie miesza w kodzie usuwajac , , komentarze, zlamania linii itp. Również zwyczajny znak @ stojacy samotnie jest z reguly przez Sweave , usuwany jako znak komentarza w plikach .rnw. Generalna, zasada, jest aby duże fragmenty nie wymagajace procesowania w Sweave nie poddawać temu procesowi. W przypadkach bardziej skomplikowanych dokumentów o wieloplikowej architekturze, może to nawet oznaczać konieczność napisanie odpowiednika pliku makefile dla procesu kompilacji. Innym potencjalnym sposobem3 jest przekazanie do parametrów Sweavea by ten dolaczy l kod przekazany do parsera, co osiaga sie, komenda, , , \SweaveOpts{keep.source=TRUE} Jeszcze innym sposobem jest oszukanie Sweave, aby ten sam wytworzyl to co powinien zastać LATEX: <<results=tex,echo=FALSE>>= cat('<<>>=\ngetwd()\n@\n') @ Co daje poniższy wynik: <<>>= getwd() @ 3.5 Grafika w Sweave Pojedynczy blok potrafi zwrócić pojedynczy wykres, do czego wystarczy uruchomienia parametru fig w bloku Sweave > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') 3 Nie byl sprawdzany przeze mnie 12 1.0 0.5 0.0 −1.0 −0.5 sin(x) 0 2 4 6 8 10 x Najważniejsza, rzecza, przy wykorzystaniu Sweave do tworzenia grafik jest, to aby pamietać by pojedynczy blok posiadal nie mniej nie wiecej a dokladnie , , jeden wykres. Do wykresów można przekazywać dowolne parametry obslugiwane przez R. Można użyć dodatkowych parametrów. Takim parametrem jest np. Gin odpowiadajacy skalowaniu wykresów , \setkeys{Gin}{width=0.7\textwidth} 3.5.1 Etykietowanie + grafika Niestety niewiele można zrobić z grafika,, dopóki nie bedzie można jej skalować i , specjalnie umieszczać w dokumencie. Twórcy sweave przyszli jednak z pomocna, dlonia, dla osób, które nie lubia, zostawiać wszystkiego dla Sweave. Jeśli blok sweave posiada etykiete, z nazwa,, to ta nazwa użyta zostanie do utworzenia pliku z grafika, tego bloku. Lacz , ac , to z opcja, \SweaveOpts{include=FALSE} pozwala to użytkownikowi tworzyć i dowolnie dolaczać wykresy do dokumentu. , Przykladowo, jeśli blok poniższy blok posiada etykiete, test to plik 4 wygladać bedzie nastepuj aco: ”genplots/plot-test.pdf”. , , , , 3.5.2 Opcje eksportu grafiki Na R można wymusić aby grafiki byly eksportowane do podfolderu zamiast w glównym drzewie. Uzyskuje sie, to opcja:, 4 Po uwzglednieniu prefiksu , 13 0.0 −0.5 −1.0 sin(x) 0.5 1.0 > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') 0 2 4 6 x 14 Rysunek 7: Wykres przy Gin = 1.7 8 0.0 −1.0 −0.5 sin(x) 0.5 1.0 > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') 0 2 4 6 8 x Rysunek 8: Wykres przy Gin = 0.7 0.0 −1.0 −0.5 sin(x) 0.5 1.0 > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') 0 2 4 6 8 10 x Rysunek 9: Wykres przy Gin = 0.2 15 10 1.0 0.5 cos(x) 0.0 −0.5 −1.0 0 2 4 6 x Rysunek 10: Wykres z etykieta, 16 8 10 \SweaveOpts{prefix.string=podkatalog/prefix} Co spowoduje eksport wykresów do ’podkatalogu’ i rozpoczecie nazwy każdego , pliku z użyciem ’prefix’ 4 Przyklady 4.1 Przykladowy plik rnw \documentclass[10pt,a4paper,oneside]{article} \usepackage[utf8]{inputenc} \usepackage[OT4]{polski} % polish language support \usepackage{makeidx} %for index preparation \usepackage{natbib} %bibtex package \usepackage{spverbatim} %for line breaking verbatim %\usepackage{ucs} \author{mgr inz. Piotr Kowalski} \title{Wprowadzenie do Sweave} \makeindex \begin{document} \SweaveOpts{prefix.string=../genplots/plot} \begin{titlepage} \maketitle \end{titlepage} \begin{abstract} Krótkie wprowadzenie do uzywania Sweave, pakietu umozliwiajacego po laczenie platformy obliczeń statycznych R-cran , , oraz dokumentów Latex \end{abstract} \newpage \subsection*{Lista wersji} \begin{description} \item[Wersja 0.1] - 8.04.2012 - Kowalski Piotr - pierwsza wersja dokumentu, wymagajaca dalszych uzupe lnień oraz , testów na Windows \item[Wersja 0.2] - 13.04.2012 - Kowalski Piotr - druga wersja z uzupe lniona, instalacja, dla systemów Windows \item[Wersja 0.3] - 20.04.2012 - Kowalski Piotr - trzecia wersja z dorzuconymi zrzutami ekranu z instalacji w Windows7. \item[Wersja 1.0] - 16.05.2012 - Kowalski Piotr - czwarta wersja, zamykajaca pierwsze prace nad dokumentem. Uzupe lniono , tworzenie grafiki w Sweave oraz importowanie jej do Latexa. Do laczono równiez kod prezentacji Sweave , \end{description} \newpage \tableofcontents \newpage \section{Czym jest Sweave} Sweave\index{Sweave} jest narzedziem do generowania plików tex zawierajacych obliczenia, grafiki i wiele innych , , obiektów wytworzonych przez przez pakiet R. Umozliwia dynamiczne tworzenie raportów i jest przyk ladem tzw. '' programowania objaśniajacego ''\index{Programowanie objaśniajace}\footnote{ang. literate programming}. Dla nas , , jest to jednak sposób na stworzenie inteligentnego dokumentu, który potrafi generować losowości i liczyć dla nas wyniki. Jest to równiez narzedzie pozwalajace na proste wstrzykiwanie skomplikowanych grafik i wykresów do fachowo , , z lozonych dokumentów \LaTeX. W ponizszym instruktazu zak ladam milczaco, ze uzytkownik posiada podstawowa, znajomość zarówno pakietu R jak i , jezyka \LaTeX. Podobnie za lozone jest posiadanie zainstalowanej lokalnie instancji pakietu R oraz posiadanie , środowiska i edytora do pisania dokumentów \TeX. \section{Instalacja Sweave} 17 pakietu R-cran i jest domyślnie z nim instalowany. W przypadku W stan obecny pakiet Sweave stanowi wbudowana, cześć , systemów unixowych po instalacji utworzony powinien zostać skrypt w \slash usr\slash bin\slash R co czyni go ogólnodostepnym dla innych programów w systemie. W przypadku systemów , z rodziny Windows, podobne powinno zostać zrealizowane poprzez do laczenie folderu bin z pakietu R to zmiennej , globalnej PATH. W przypadku, gdy takie dopisanie nie zosta lo zrealizowane, zaleca sie, przeprowadzenie tego recznie. , W przypadku instalacji na Windows nalezy jeszcze do laczyć pakiet stylu do źróde l kompilacyjnych Latexa. , \subsection{Automatyzacja kompilacji Sweave} W zalezności od, stosowanego przez uzytkownika, edytora \LaTeX róznie przebiega proces uruchomienia automatycznego generowanie plików pdf w sposób automatyczny. W skrócie sprowadza sie, to zdefiniowania w lasnej komendy kompilacji, która powinna wygladać mniej wiecej w sposób nastepuj acy: , , , , \begin{verbatim} R CMD Sweave %.rnw \end{verbatim} Zaprezentowana powyzej komenda powinna dzia lać w wiekszości systemów unixowych i w dowolnym z edytorów. Sprawdzenia , uzyto z wykorzystaniem edytora \TeX Maker\index{\TeX Maker} 3.0.2 oraz: \begin{verbatim} $ tex --version TeX 3.1415926 (TeX Live 2009/Debian) \end{verbatim} \subsubsection{Automatyzacja kompilacji dla \TeX Maker} Miejscem przeznaczonym do umieszczenia komendy jest panel komend uzytkownika znajdujacy sie, w menu User->User , commands -> Edit user commands. Zgodnie z mozliwościami programu komenda to moze zostać rozwinieta tak, aby obs luzyć , ca lość procesu tworzenia dokumentu co mozna obserwować ponizej.\footnote{evince jest lekka, przegladark a, plików , pdf} \begin{verbatim} R CMD Sweave %.rnw | pdflatex -synctex=1 -interaction=nonstopmode %.tex | evince %.pdf \end{verbatim} \begin{figure}[hb]\centering\includegraphics[scale=0.5]{../images/texmaker_Sweave.png}\caption{Konfiguracja Sweave dla texmaker}\label{install.texmaker} \end{figure} \subsubsection{Automatyzja kompilacji dla Miktex 2.9, LEd na platformie Windows} Proces ustanowienia automatyzacji jest bardziej skomplikowany na systemach Windows. Prezentowane jest tutaj rozwiazanie , dla popularnego duetu Latexowego czyli Miktex+LEd\index{Miktex}\index{LEd}. Proces tej automatyzacji jest trzy krokowy i powinien wygladać podobnie dla innych środowisk kompilacji \LaTeX. , \subsubsection*{Udostepnie pakietu R w linii komend} , Aby proces kompilacji móg l wykorzystać R, aplikacja ta musi być dobrze rozpoznawana w ca lym systemie operacyjnym. Aby sprawdzić czy tak faktycznie jest wystarczy uruchomić program linii komend i wpisać w nim R + enter. Jeśli program jest dobrze znany, to powinien sie, uruchomić i w linii komend powinna być mozliwość wykonywana poleceń jego jezyka. Jeśli natomiast pojawi sie, komunikat, ze ta nazwa/program nie jest znany, to opisuje tutaj sposób , naprawienia tego faktu. Najpierw nalezy odszukać ściezke, do podkatalogu bin znajdujacego sie, w katalogu z instalacja, R. Domyślnie ma ona , postać ''C:\textbackslash\textbackslash Program Files\textbackslash R\textbackslash R-X.XX.X\textbackslash bin''. Trzeba nakazać programom zapoznać sie, z programami tam znajdujacymi sie. W systemach Windows istnieje specjalny zestaw , , zmiennych, które sa, dostepne do odczytu wszystkim programom w systemie operacyjnym. Sa, to tzw. zmienne środowiskowe. , Wśród tych zmiennych jest jedna z nich nazywana PATH, i zawiera ona wszystkie katalogi w których znajduja, sie, programy, które maja, być dostepne dla wszystkich innych programów. , Aby otrzymać dostep do zmiennych środowiskowych nalezy kliknać PPM na ikone, Mój komputer i przejść do w laściwości. , , Wyświetli sie, okno \ref{screen.win7.ustawienia}. W zaawansowanych ustawieniach systemu odszukać przycisk zmiennych środowiskowych\index{Zmienne środowiskowe} (ang. enviromental variables) jak na obrazie \ref{screen.win7.zmienne} jej edycje. UWAGA. Nie nalezy niczego kasować . W nastepnej kolejności nalezy odszukać zmienna, PATH i kliknać , , , z tej zmiennej. Usuniecie jej zawartości moze spowodować uszkodzenie systemu operacyjnego. Nalezy na końcu wartości , 18 tej zmiennej (obrazek \ref{screen.win7.path}) postawić znak ';' oraz wkleić ściezke, do katalogu bin. Oznacza to, ze na koniec zmiennej PATH powinien zostać doklejony frgament o postaci np. ;C:\textbackslash\textbackslash Program Files\textbackslash R\textbackslash R-X.XX.X\textbackslash bin . Po zakończeniu edycji nalezy zapisać wartość zmiennej i dokonać sprawdzenia w \textbf{nowo otwartym oknie linii komend} sprawdzajac, tak jak na poczatku, czy program R sta l sie, widoczny w systemie. , , \begin{figure}\centering\includegraphics[scale=0.45]{../images/ustawienia.jpeg}\caption{Zaawansowane ustawienia systemu w Win7}\label{screen.win7.ustawienia} \end{figure} \begin{figure}\centering\includegraphics[scale=0.45]{../images/okno_zmienne.jpeg}\caption{Zmienne środowiskowe systemu w Win7}\label{screen.win7.zmienne} \end{figure} \begin{figure}\centering\includegraphics[scale=0.45]{../images/okno_edycja.jpeg}\caption{Zmienne środowiskowe systemu w Win7}\label{screen.win7.path} \end{figure} \subsubsection*{Import sk ladni Sweave} W procesie kompilacji pliku tex, kompilator Latexa wymagać Cie, bedzie informacji o sk ladni zwiazanej z pakietem , , Sweave. W naszym wypadku tym kompilatorem jest platforma Miktex. Musimy zatem poinformować platforme, gdzie moze odszukać ona plik Sweave.sty. Zwyczajowo ściezka ta ma postać '' C:\textbackslash\textbackslash Program Files\textbackslash R\textbackslash R-2.15.0\textbackslash share\textbackslash texmf ''. Nalezy uruchomić Miktex(Admin) -> Settings i w drugiej zak ladce zawierajacej ''katalogi zarzadzane przez Miktex'' dodać nowy o ściezce podobnej do powyzszej , , (patrz rysunek \ref{screen.win7.miktex}). Po zapisaniu ustawień styl Sweave.sty powinien być dostepny w procesie , kompilacji latex. \begin{figure}\centering\includegraphics[scale=0.25]{../images/miktex.jpeg}\caption{Zmienne środowiskowe systemu w Win7}\label{screen.win7.miktex} \end{figure} \subsubsection*{Automatyczny skrypt kompilacji} w lasne skrypty kompilacyjne. Po lewo na pasku znajduje sie, 5 Podobnie jak \TeX Maker równiez i LEd udostepnia , kolejnych przycisków o nazwie U. Po najechaniu na nie pojawia sie, informacja, ze wciśniecie przycisku powoduje wykonanie pliku userX.bat , gdzie pod X jest liczba od 1 do 5. To w laśnie jeden z tych skryptów powinien zostać uzyty do wykonywania naszego procesu kompilacji. Ponizej podaje postać tego skryptu \begin{verbatim} cd %1 R CMD Sweave %2.rnw pdflatex.exe %2.tex \end{verbatim} Pod $\%1$ ukrywa sie, katalog w którym znajduje sie, plik źród lowy, pod $\%2$ natomiast jego nazwa bez rozszerzenia. Aby zautomatyzować proces kompilacji w LEd nalezy powyzsza, treść umieścić w pliku np. user1.bat, który znajduje sie, domyślnie w katalogu: ''C:\textbackslash\textbackslash Program Files\textbackslash LEd\textbackslash Batches. Po wykonaniu tego pod odpowiednim przyciskiem U odbywać sie, bedzie proces kompilacji Sweave$+$pdflatex. , UWAGA. W systemach Windows Vista oraz późniejszych nie mozna bezpośrednio edytować, a dok ladniej zapisywać, do plików systemowych. W takim wypadku nalezy plik userX.bat przenieść np. na swój pulpit, edytować a dopiero nastepnie , przenieść go z~powrotem do katalogu Batches. \subsection{Zasada dzia lania Sweave} Ponizszy diagram prezentuje zasade, dzia lania procesu kompilacji dokumentu Rnw\index{Plik rnw} zawierajacego kod , dla pakietu Sweave. W pierwszej cześci procesu plik rnw. t lumaczony jest na plik \TeX owski oraz eksportowane , sa, wszystkie wykresy. W dalszej cześci nastepuje kompilacja programu pdflatex. Ca lość prezentuje diagram \ref{diag.sweave.compile} , , %% programowanie obrazkow w LaTeXu \begin{figure} \centering \begin{picture}(240,50)(10,-20) \put(0,0){\framebox(40,20){$\%$.rnw}} \put(40,10){\vector(1,0){80}} \put(45,20){Sweave $\%$.rnw} \put(120,0){\framebox(40,20){$\%$.tex}} \put(160,10){\vector(1,0){80}} \put(165,20){pdflatex $\%$.tex} \put(240,0){\framebox(40,20){$\%$.pdf}} \end{picture} 19 \caption{Proces kompilacji Sweave} \label{diag.sweave.compile} \end{figure} \section{Programowanie w Sweave} W tej cześci skupimy sie, na umówieniu bloków Sweave. Wszystko co nie jest blokiem Sweave jest przez pierwszy proces , kompilacji zwyczajnie kopiowane do pliku .tex. Plik .rnw po prawdzie nie rózni sie, niczym od zwyczajnego dokumentu wstawki. Proces tworzenia takiego dokumentu nalezy zaczać podobnie jak w przypadku \LaTeX gdyby nie do laczone , , pisania zwyczajnego pliku latexowego. \subsection{Podstawowy blok Sweave} W Sweave do tworzenia bloków uzywa sie, specjalnego rodzaju bloku wygladaj acego nastepuj aco\index{Blok Sweave} , , , , \input{verbatim1} %% jedyny sposób by ukryć kawa lek tekstu przed Sweave tak aby ten w nim nie d luba l W miejscu name umieścić mozna zarówno nazwe, w lasna, dla bloku jak i szereg parametrów Na przyk lad: <<echo=false>>= cat('<<>>=\nx=c(1,2,3)\nx^2\n@\n') @ Wyprodukuje <<>>= x=c(1,2,3) x^2 @ W bloku mozna wykonywać dowolne komendy jezyka R. W miare, rozwoju tego dokumentu obserwować bedziemy, ze uzycie , , niektórych wyników jest trudniejsze niz reszty. \subsubsection{Parametry bloku} Blok moze posiadać wiele róznych parametrów, zebranych w tabeli \ref{table.block.paramas}\index{Blok Sweave!parametry}. \begin{table} \centering \begin{tabular}{| c | p{12cm} |}\hline echo\index{Blok Sweave!echo} & TRUE-pokazuje komende, wykonania, FALSE - ukrywaja\\\hline , fig\index{Blok Sweave!fig} & TRUE-przekazuje wykres do umieszczenia - FALSE - ukrywa wykresy\\\hline eval\index{Blok Sweave!eval} & ustala czy wyniki sa, obliczane \\\hline results\index{Blok Sweave!results} & opcje: verbatim,tex,hide - to rózne tryby wyświetlania \\\hline engine\index{Blok Sweave!engine} & ustala narzedzie do przetwarzania w Sweave: S, R, S3 or S4 \\\hline , split\index{Blok Sweave!split} & ustala podzia l pliku wynikowego, wartość TRUE oznacza istnienie podzia lu\\\hline label\index{Blok Sweave!label} & podaje nazwe, pliku wynikowego, jest równiez etykieta, dla bloku\\\hline \end{tabular} \caption{Podsumowanie parametrów bloku} \label{table.block.paramas} \end{table} Pokazemy to na przyk ladzie ponizszego kodu: <<echo=FALSE>>= cat('<<param=value>>=\nx=c(1,2,3)\nx\n@') @ Przy w laczonym echo: , <<echo=TRUE>>= x=c(1,2,3) x @ i wy laczonym: , <<echo=FALSE>>= x=c(1,2,3) x @ Przy w laczonym eval: , 20 <<echo=TRUE,eval=TRUE>>= x=c(1,2,3) x @ i wy laczonym: , <<echo=TRUE,eval=FALSE>>= x=c(1,2,3) x @ Przy results verbatim: <<echo=TRUE,eval=TRUE,results=verbatim>>= x=c(1,2,3) x @ results tex: <<echo=TRUE,eval=TRUE,results=verbatim>>= x=c(1,2,3) x @ results hide: <<echo=TRUE,eval=TRUE,results=verbatim>>= x=c(1,2,3) x @ \subsection{Blok linijkowy Sweave} Mozliwe jest równiez uzywanie R do wype lniania tekstów linijkowych\index{Blok Sweave!linijkowy}. Np. Pierwiastek z 2: $\sqrt{2} = \Sexpr{sqrt(2)}$. do wykonania tego potrzebny jest blok $\backslash Sexpr\{\cdot\}$. Blok ten wyświetla zawsze pojedynczy element, pierwszy w wektorze odpowiedzi. Dla sygna lu $\backslash Sexpr\{c(1,2,3)\}$ otrzymujemy bowien $\Sexpr{c(1,2,3)}$ \subsection{Powtarzanie bloków} Uzycie konstrukcji <<echo=false>>= cat('<<>>=') @ Jest niczym innym jak przypisaniem. Standardowy blok jest anonimowy. Mozna jednak nadać im nazwy. <<echo=false>>= cat('<<A>>=\nx=c(1,2,3)\n@') @ <<A>>= x=c(1,2,3) @ Najwazniejsza, zaleta, tego rozwiazania jest mozliwość wielokrotnego uzycia tych samych bloków , <<echo=false>>= cat('<<>>=\n<<A>>\n<<A>>\n@') @ <<echo>>= <<A>> <<A>> @ \subsection{Ukrywanie fragmentu kodu przed Sweave} Skomplikowanym procesem jest ukrywanie kawa lków pliku przed byciem przeprocesowanym przez Sweave. Okazuje sie, jednak, ze jest prosty sposób na ukrycie fragmentów kodu przed byciem przegladanym przez Sweave. Wystarczy ukryć , je w innym pliku. Sweave procesuje jedynie pojedynczy plik, wiec jeśli niechcemy aby jakiś fragment naszego nie , bra l w nim udzia lu wystarczy umieścić go w osobnym pliku i kazać latexowi uzyć go w nastepnym etapie , \begin{verbatim} \input{ukryte1} \end{verbatim} gdzie plik ukryte1.tex zawiera rzeczy nie procesowane przez Sweave. 21 Kiedy naleza loby zadbać o nie procesowanie takiego fragmentu? Np. gdy móg lby zawierać bloki Sweave, które nie powinny być interpretowane. Sweave ponadto czesto nadmiernie miesza w kodzie usuwajac komentarze, z lamania linii , , itp. Równiez zwyczajny znak $@$ stojacy samotnie jest z regu ly przez Sweave usuwany jako znak komentarza w plikach , .rnw. Generalna, zasada, jest aby duze fragmenty nie wymagajace procesowania w Sweave nie poddawać temu procesowi. W przypadkach bardziej skomplikowanych dokumentów o wieloplikowej architekturze, moze to nawet oznaczać konieczność napisanie odpowiednika pliku makefile dla procesu kompilacji. Innym potencjalnym sposobem\footnote{Nie by l sprawdzany przeze mnie} jest przekazanie do parametrów Sweavea by ten do laczy sie, komenda, l kod przekazany do parsera, co osiaga , , \begin{verbatim} <<results=tex,echo=FALSE>>= cat('\\SweaveOpts{keep.source=TRUE}\n') @ \end{verbatim} Jeszcze innym sposobem jest oszukanie Sweave, aby ten sam wytworzy l to co powinien zastać \LaTeX : \input{verbatim2} Co daje ponizszy wynik: \begin{verbatim} <<results=tex,echo=FALSE>>= cat('<<>>=\ngetwd()\n@\n') @ \end{verbatim} \subsection{Grafika w Sweave} Pojedynczy blok potrafi zwrócić pojedynczy wykres, do czego wystarczy uruchomienia parametru fig w bloku Sweave \index{Grafika}\index{Grafika!plot} <<echo=TRUE,fig=TRUE,eval=TRUE>>= x=seq(0,10,by=0.01) plot(x,sin(x),'l') @ Najwazniejsza, rzecza, przy wykorzystaniu Sweave do tworzenia grafik jest, to aby pamietać by pojedynczy blok posiada l , nie mniej nie wiecej a dok ladnie jeden wykres. Do wykresów mozna przekazywać dowolne parametry obs lugiwane przez , R. Mozna uzyć dodatkowych parametrów. Takim parametrem jest np. Gin odpowiadajacy skalowaniu wykresów , <<echo=FALSE>>= cat('\\setkeys{Gin}{width=0.7\\textwidth}') @ \begin{figure} \centering \setkeys{Gin}{width=1.7\textwidth} <<jeden,echo=TRUE,fig=TRUE,eval=TRUE>>= x=seq(0,10,by=0.01) plot(x,sin(x),'l') @ \caption{Wykres przy Gin = 1.7} \label{plot.gin.1.7} \end{figure} \begin{figure} \centering \setkeys{Gin}{width=0.7\textwidth} <<dwa,echo=TRUE,fig=TRUE,eval=TRUE>>= x=seq(0,10,by=0.01) plot(x,sin(x),'l') @ \caption{Wykres przy Gin = 0.7} \label{plot.gin.0.7} \end{figure} \setkeys{Gin}{width=0.2\textwidth} \begin{figure} 22 \centering <<trzy,echo=TRUE,fig=TRUE,eval=TRUE>>= x=seq(0,10,by=0.01) plot(x,sin(x),'l') @ \caption{Wykres przy Gin = 0.2} \label{plot.gin.0.2} \end{figure} \setkeys{Gin}{width=2.4\textwidth} \subsubsection{Etykietowanie + grafika} Niestety niewiele mozna zrobić z grafika, dopóki nie bedzie mozna jej skalować i specjalnie umieszczać w dokumencie. , , Twórcy sweave przyszli jednak z pomocna, d lonia, dla osób, które nie lubia, zostawiać wszystkiego dla Sweave. Jeśli blok sweave posiada etykiete, z nazwa, to ta nazwa uzyta zostanie do utworzenia pliku z grafika, tego bloku. Lacz ac , , , to z opcja, \begin{verbatim} <<results=tex,echo=FALSE>>= cat('\\SweaveOpts{include=FALSE}\n') @ \end{verbatim} pozwala to uzytkownikowi tworzyć i dowolnie do laczać wykresy do dokumentu. Przyk ladowo, jeśli blok ponizszy , blok posiada etykiete, test \setkeys{Gin}{width=1\textwidth} \begin{figure} \centering <<test,echo=false,fig=TRUE>>= x=seq(0,10,by=0.01) plot(x,cos(x),'l') @ \caption{Wykres z etykieta} , \label{plot.labeled} \end{figure} to plik \footnote{Po uwzglednieniu prefiksu} wygladać bedzie nastepuj aco: "genplots/plot-test.pdf". , , , , , \subsubsection{Opcje eksportu grafiki} Na R mozna wymusić aby grafiki by ly eksportowane do podfolderu zamiast w g lównym drzewie. Uzyskuje sie, to opcja:\index{Kompilacja , parametry!parametry}\index{Kompilacja parametry!eksport wykresów} \begin{verbatim} <<results=tex,echo=FALSE>>= cat('\\SweaveOpts{prefix.string=podkatalog/prefix}\n') @ \end{verbatim} Co spowoduje eksport wykresów do 'podkatalogu' i rozpoczecie nazwy kazdego pliku z uzyciem 'prefix' , \section{Przyk lady} \subsection{Przyk ladowy plik rnw} \begingroup \fontsize{6pt}{9pt}\selectfont \input{rnw_version} \endgroup \subsubsection{Plik bibliografia.bib} \begingroup \fontsize{6pt}{9pt}\selectfont \input{bib_version} \endgroup \subsection{Przyk ladowy plik tex} \begingroup \fontsize{6pt}{9pt}\selectfont \input{tex_version} \endgroup \subsection{Prezentacja Sweave} 23 \newpage \listoffigures \listoftables \printindex \nocite{*} \bibliographystyle{plain} \bibliography{bibliografia} \end{document} 4.1.1 Plik bibliografia.bib @Book{biecek, author = {Przemys law Biecek}, ALTeditor = {}, title = {Przewodnik po pakiecie R}, publisher = {Oficyna wydawnicza GIS}, year = {2011}, address = {Wroc law} } @Unpublished{jakowski, author = {Sebastian Jakowski}, title = {Sweave i jego zastosowanie}, note = {Projekt w ramach przedmiotu MPIS}, OPTkey = {}, OPTmonth = {}, year = {2011}, OPTannote = {} } @Unpublished{ryszewski, author = {Daniel Ryszewski}, title = {Sweave i jego zastosowania - uzupe lnienie pracy {Sebastiana} {Jakowskiego}}, note = {Projekt w ramach przedmiotu MPIS}, OPTkey = {}, OPTmonth = {}, year = {2011}, OPTannote = {} } @Manual{Leisch, title = {Sweave User Manual}, OPTkey = {}, author = {Friedrich Leisch}, OPTorganization = {}, OPTaddress = {}, OPTedition = {}, OPTmonth = {}, OPTyear = {}, OPTnote = {}, annote = {R Version 2.7.1} } 4.2 Przykladowy plik tex \documentclass[10pt,a4paper,oneside]{article} \usepackage[utf8]{inputenc} \usepackage[OT4]{polski} % polish language support \usepackage{makeidx} %for index preparation \usepackage{natbib} %bibtex package \usepackage{spverbatim} %for line breaking verbatim %\usepackage{ucs} 24 \author{mgr inz. Piotr Kowalski} \title{Wprowadzenie do Sweave} \makeindex \usepackage{Sweave} \begin{document} \begin{titlepage} \maketitle \end{titlepage} \begin{abstract} Krótkie wprowadzenie do uzywania Sweave, pakietu umozliwiajacego po laczenie platformy obliczeń statycznych R-cran , , oraz dokumentów Latex \end{abstract} \newpage \subsection*{Lista wersji} \begin{description} \item[Wersja 0.1] - 8.04.2012 - Kowalski Piotr - pierwsza wersja dokumentu, wymagajaca dalszych uzupe lnień oraz , testów na Windows \item[Wersja 0.2] - 13.04.2012 - Kowalski Piotr - druga wersja z uzupe lniona, instalacja, dla systemów Windows \item[Wersja 0.3] - 20.04.2012 - Kowalski Piotr - trzecia wersja z dorzuconymi zrzutami ekranu z instalacji w Windows7. \end{description} \newpage \tableofcontents \newpage \section{Czym jest Sweave} Sweave\index{Sweave} jest narzedziem do generowania plików tex zawierajacych obliczenia, grafiki i wiele innych , , obiektów wytworzonych przez przez pakiet R. Umozliwia dynamiczne tworzenie raportów i jest przyk ladem tzw. '' programowania objaśniajacego ''\index{Programowanie objaśniajace}\footnote{ang. literate programming}. Dla nas , , jest to jednak sposób na stworzenie inteligentnego dokumentu, który potrafi generować losowości i liczyć dla nas wyniki. Jest to równiez narzedzie pozwalajace na proste wstrzykiwanie skomplikowanych grafik i wykresów do fachowo , , z lozonych dokumentów \LaTeX. W ponizszym instruktazu zak ladam milczaco, ze uzytkownik posiada podstawowa, znajomość zarówno pakietu R jak i , jezyka \LaTeX. Podobnie za lozone jest posiadanie zainstalowanej lokalnie instancji pakietu R oraz posiadanie , środowiska i edytora do pisania dokumentów \TeX. \section{Instalacja Sweave} W stan obecny pakiet Sweave stanowi wbudowana, cześć pakietu R-cran i jest domyślnie z nim instalowany. W przypadku , systemów unixowych po instalacji utworzony powinien zostać skrypt w \slash usr\slash bin\slash R co czyni go ogólnodostepnym dla innych programów w systemie. W przypadku systemów , z rodziny Windows, podobne powinno zostać zrealizowane poprzez do laczenie folderu bin z pakietu R to zmiennej , globalnej PATH. W przypadku, gdy takie dopisanie nie zosta lo zrealizowane, zaleca sie, przeprowadzenie tego recznie. , W przypadku instalacji na Windows nalezy jeszcze do laczyć pakiet stylu do źróde l kompilacyjnych Latexa. , \subsection{Automatyzacja kompilacji Sweave} W zalezności od, stosowanego przez uzytkownika, edytora \LaTeX róznie przebiega proces uruchomienia automatycznego generowanie plików pdf w sposób automatyczny. W skrócie sprowadza sie, to zdefiniowania w lasnej komendy kompilacji, która powinna wygladać mniej wiecej w sposób nastepuj acy: , , , , \begin{verbatim} R CMD Sweave %.rnw \end{verbatim} Zaprezentowana powyzej komenda powinna dzia lać w wiekszości systemów unixowych i w dowolnym z edytorów. Sprawdzenia , uzyto z wykorzystaniem edytora \TeX Maker\index{\TeX Maker} 3.0.2 oraz: \begin{verbatim} 25 $ tex --version TeX 3.1415926 (TeX Live 2009/Debian) \end{verbatim} \subsubsection{Automatyzacja kompilacji dla \TeX Maker} Miejscem przeznaczonym do umieszczenia komendy jest panel komend uzytkownika znajdujacy sie, w menu User->User , commands -> Edit user commands. Zgodnie z mozliwościami programu komenda to moze zostać rozwinieta tak, aby obs luzyć , a, plików ca lość procesu tworzenia dokumentu co mozna obserwować ponizej.\footnote{evince jest lekka, przegladark , pdf} \begin{verbatim} R CMD Sweave %.rnw | pdflatex -synctex=1 -interaction=nonstopmode %.tex | evince %.pdf \end{verbatim} \begin{figure}[hb]\centering\includegraphics[scale=0.5]{../images/texmaker_Sweave.png}\caption{Konfiguracja Sweave dla texmaker}\label{install.texmaker} \end{figure} \subsubsection{Automatyzja kompilacji dla Miktex 2.9, LEd na platformie Windows} Proces ustanowienia automatyzacji jest bardziej skomplikowany na systemach Windows. Prezentowane jest tutaj rozwiazanie , dla popularnego duetu Latexowego czyli Miktex+LEd\index{Miktex}\index{LEd}. Proces tej automatyzacji jest trzy krokowy i powinien wygladać podobnie dla innych środowisk kompilacji \LaTeX. , \subsubsection*{Udostepnie pakietu R w linii komend} , Aby proces kompilacji móg l wykorzystać R, aplikacja ta musi być dobrze rozpoznawana w ca lym systemie operacyjnym. Aby sprawdzić czy tak faktycznie jest wystarczy uruchomić program linii komend i wpisać w nim R + enter. Jeśli program jest dobrze znany, to powinien sie, uruchomić i w linii komend powinna być mozliwość wykonywana poleceń jego jezyka. Jeśli natomiast pojawi sie, komunikat, ze ta nazwa/program nie jest znany, to opisuje tutaj sposób , naprawienia tego faktu. Najpierw nalezy odszukać ściezke, do podkatalogu bin znajdujacego sie, w katalogu z instalacja, R. Domyślnie ma ona , postać ''C:\textbackslash\textbackslash Program Files\textbackslash R\textbackslash R-X.XX.X\textbackslash bin''. Trzeba nakazać programom zapoznać sie, z programami tam znajdujacymi sie. W systemach Windows istnieje specjalny zestaw , , zmiennych, które sa, dostepne do odczytu wszystkim programom w systemie operacyjnym. Sa, to tzw. zmienne środowiskowe. , Wśród tych zmiennych jest jedna z nich nazywana PATH, i zawiera ona wszystkie katalogi w których znajduja, sie, programy, które maja, być dostepne dla wszystkich innych programów. , PPM na ikone, Mój komputer i przejść do w laściwości. Aby otrzymać dostep do zmiennych środowiskowych nalezy kliknać , , Wyświetli sie, okno \ref{screen.win7.ustawienia}. W zaawansowanych ustawieniach systemu odszukać przycisk zmiennych środowiskowych\index{Zmienne środowiskowe} (ang. enviromental variables) jak na obrazie \ref{screen.win7.zmienne} . W nastepnej kolejności nalezy odszukać zmienna, PATH i kliknać jej edycje. UWAGA. Nie nalezy niczego kasować , , , z tej zmiennej. Usuniecie jej zawartości moze spowodować uszkodzenie systemu operacyjnego. Nalezy na końcu wartości , tej zmiennej (obrazek \ref{screen.win7.path}) postawić znak ';' oraz wkleić ściezke, do katalogu bin. Oznacza to, ze na koniec zmiennej PATH powinien zostać doklejony frgament o postaci np. ;C:\textbackslash\textbackslash Program Files\textbackslash R\textbackslash R-X.XX.X\textbackslash bin . Po zakończeniu edycji nalezy zapisać wartość zmiennej i dokonać sprawdzenia w \textbf{nowo otwartym oknie linii komend} sprawdzajac, tak jak na poczatku, czy program R sta l sie, widoczny w systemie. , , \begin{figure}\centering\includegraphics[scale=0.45]{../images/ustawienia.jpeg}\caption{Zaawansowane ustawienia systemu w Win7}\label{screen.win7.ustawienia} \end{figure} \begin{figure}\centering\includegraphics[scale=0.45]{../images/okno_zmienne.jpeg}\caption{Zmienne środowiskowe systemu w Win7}\label{screen.win7.zmienne} \end{figure} \begin{figure}\centering\includegraphics[scale=0.45]{../images/okno_edycja.jpeg}\caption{Zmienne środowiskowe systemu w Win7}\label{screen.win7.path} \end{figure} \subsubsection*{Import sk ladni Sweave} W procesie kompilacji pliku tex, kompilator Latexa wymagać Cie, bedzie informacji o sk ladni zwiazanej z pakietem , , Sweave. W naszym wypadku tym kompilatorem jest platforma Miktex. Musimy zatem poinformować platforme, gdzie moze odszukać ona plik Sweave.sty. Zwyczajowo ściezka ta ma postać '' C:\textbackslash\textbackslash Program Files\textbackslash R\textbackslash R-2.15.0\textbackslash share\textbackslash texmf ''. Nalezy uruchomić Miktex(Admin) -> Settings 26 i w drugiej zak ladce zawierajacej ''katalogi zarzadzane przez Miktex'' dodać nowy o ściezce podobnej do powyzszej , , (patrz rysunek \ref{screen.win7.miktex}). Po zapisaniu ustawień styl Sweave.sty powinien być dostepny w procesie , kompilacji latex. \begin{figure}\centering\includegraphics[scale=0.25]{../images/miktex.jpeg}\caption{Zmienne środowiskowe systemu w Win7}\label{screen.win7.miktex} \end{figure} \subsubsection*{Automatyczny skrypt kompilacji} Podobnie jak \TeX Maker równiez i LEd udostepnia w lasne skrypty kompilacyjne. Po lewo na pasku znajduje sie, 5 , kolejnych przycisków o nazwie U. Po najechaniu na nie pojawia sie, informacja, ze wciśniecie przycisku powoduje wykonanie pliku userX.bat , gdzie pod X jest liczba od 1 do 5. To w laśnie jeden z tych skryptów powinien zostać uzyty do wykonywania naszego procesu kompilacji. Ponizej podaje postać tego skryptu \begin{verbatim} cd %1 R CMD Sweave %2.rnw pdflatex.exe %2.tex \end{verbatim} Pod $\%1$ ukrywa sie, katalog w którym znajduje sie, plik źród lowy, pod $\%2$ natomiast jego nazwa bez rozszerzenia. Aby zautomatyzować proces kompilacji w LEd nalezy powyzsza, treść umieścić w pliku np. user1.bat, który znajduje sie, domyślnie w katalogu: ''C:\textbackslash\textbackslash Program Files\textbackslash LEd\textbackslash Batches. Po wykonaniu tego pod odpowiednim przyciskiem U odbywać sie, bedzie proces kompilacji Sweave$+$pdflatex. , UWAGA. W systemach Windows Vista oraz późniejszych nie mozna bezpośrednio edytować, a dok ladniej zapisywać, do plików systemowych. W takim wypadku nalezy plik userX.bat przenieść np. na swój pulpit, edytować a dopiero nastepnie , przenieść go z~powrotem do katalogu Batches. \subsection{Zasada dzia lania Sweave} kod Ponizszy diagram prezentuje zasade, dzia lania procesu kompilacji dokumentu Rnw\index{Plik rnw} zawierajacego , dla pakietu Sweave. W pierwszej cześci procesu plik rnw. t lumaczony jest na plik \TeX owski oraz eksportowane , sa, wszystkie wykresy. W dalszej cześci nastepuje kompilacja programu pdflatex. Ca lość prezentuje diagram \ref{diag.sweave.compile} , , %% programowanie obrazkow w LaTeXu \begin{figure} \centering \begin{picture}(240,50)(10,-20) \put(0,0){\framebox(40,20){$\%$.rnw}} \put(40,10){\vector(1,0){80}} \put(45,20){Sweave $\%$.rnw} \put(120,0){\framebox(40,20){$\%$.tex}} \put(160,10){\vector(1,0){80}} \put(165,20){pdflatex $\%$.tex} \put(240,0){\framebox(40,20){$\%$.pdf}} \end{picture} \caption{Proces kompilacji Sweave} \label{diag.sweave.compile} \end{figure} \section{Programowanie w Sweave} W tej cześci skupimy sie, na umówieniu bloków Sweave. Wszystko co nie jest blokiem Sweave jest przez pierwszy proces , kompilacji zwyczajnie kopiowane do pliku .tex. Plik .rnw po prawdzie nie rózni sie, niczym od zwyczajnego dokumentu \LaTeX gdyby nie do laczone wstawki. Proces tworzenia takiego dokumentu nalezy zaczać podobnie jak w przypadku , , pisania zwyczajnego pliku latexowego. \subsection{Podstawowy blok Sweave} W Sweave do tworzenia bloków uzywa sie, specjalnego rodzaju bloku wygladaj acego nastepuj aco\index{Blok Sweave} , , , , \input{verbatim1} %% jedyny sposób by ukryć kawa lek tekstu przed Sweave tak aby ten w nim nie d luba l W miejscu name umieścić mozna zarówno nazwe, w lasna, dla bloku jak i szereg parametrów Na przyk lad: \begin{Schunk} 27 \begin{Soutput} <<>>= x=c(1,2,3) x^2 @ \end{Soutput} \end{Schunk} Wyprodukuje \begin{Schunk} \begin{Sinput} > x=c(1,2,3) > x^2 \end{Sinput} \begin{Soutput} [1] 1 4 9 \end{Soutput} \end{Schunk} W bloku mozna wykonywać dowolne komendy jezyka R. W miare, rozwoju tego dokumentu obserwować bedziemy, ze uzycie , , niektórych wyników jest trudniejsze niz reszty. \subsubsection{Parametry bloku} Blok moze posiadać wiele róznych parametrów, zebranych w tabeli \ref{table.block.paramas}\index{Blok Sweave!parametry}. \begin{table} \centering \begin{tabular}{| c | p{12cm} |}\hline echo\index{Blok Sweave!echo} & TRUE-pokazuje komende, wykonania, FALSE - ukrywaja\\\hline , fig\index{Blok Sweave!fig} & TRUE-przekazuje wykres do umieszczenia - FALSE - ukrywa wykresy\\\hline eval\index{Blok Sweave!eval} & ustala czy wyniki sa, obliczane \\\hline results\index{Blok Sweave!results} & opcje: verbatim,tex,hide - to rózne tryby wyświetlania \\\hline engine\index{Blok Sweave!engine} & ustala narzedzie do przetwarzania w Sweave: S, R, S3 or S4 \\\hline , split\index{Blok Sweave!split} & ustala podzia l pliku wynikowego, wartość TRUE oznacza istnienie podzia lu\\\hline label\index{Blok Sweave!label} & podaje nazwe, pliku wynikowego, jest równiez etykieta, dla bloku\\\hline \end{tabular} \caption{Podsumowanie parametrów bloku} \label{table.block.paramas} \end{table} Pokazemy to na przyk ladzie ponizszego kodu: \begin{Schunk} \begin{Soutput} <<param=value>>= x=c(1,2,3) x @ \end{Soutput} \end{Schunk} Przy w laczonym echo: , \begin{Schunk} \begin{Sinput} > x=c(1,2,3) > x \end{Sinput} \begin{Soutput} [1] 1 2 3 \end{Soutput} \end{Schunk} i wy laczonym: , \begin{Schunk} \begin{Soutput} [1] 1 2 3 \end{Soutput} \end{Schunk} 28 Przy w laczonym eval: , \begin{Schunk} \begin{Sinput} > x=c(1,2,3) > x \end{Sinput} \begin{Soutput} [1] 1 2 3 \end{Soutput} \end{Schunk} i wy laczonym: , \begin{Schunk} \begin{Sinput} > x=c(1,2,3) > x \end{Sinput} \end{Schunk} Przy results verbatim: \begin{Schunk} \begin{Sinput} > x=c(1,2,3) > x \end{Sinput} \begin{Soutput} [1] 1 2 3 \end{Soutput} \end{Schunk} results tex: \begin{Schunk} \begin{Sinput} > x=c(1,2,3) > x \end{Sinput} \begin{Soutput} [1] 1 2 3 \end{Soutput} \end{Schunk} results hide: \begin{Schunk} \begin{Sinput} > x=c(1,2,3) > x \end{Sinput} \begin{Soutput} [1] 1 2 3 \end{Soutput} \end{Schunk} \subsection{Blok linijkowy Sweave} Mozliwe jest równiez uzywanie R do wype lniania tekstów linijkowych\index{Blok Sweave!linijkowy}. Np. Pierwiastek z 2: $\sqrt{2} = 1.4142135623731$. do wykonania tego potrzebny jest blok $\backslash Sexpr\{\cdot\}$. Blok ten wyświetla zawsze pojedynczy element, pierwszy w wektorze odpowiedzi. Dla sygna lu $\backslash Sexpr\{c(1,2,3)\}$ otrzymujemy bowien $1$ \subsection{Powtarzanie bloków} Uzycie konstrukcji \begin{Schunk} \begin{Soutput} <<>>= \end{Soutput} \end{Schunk} Jest niczym innym jak przypisaniem. Standardowy blok jest anonimowy. Mozna jednak nadać im nazwy. \begin{Schunk} 29 \begin{Soutput} <<A>>= x=c(1,2,3) @ \end{Soutput} \end{Schunk} \begin{Schunk} \begin{Sinput} > x=c(1,2,3) \end{Sinput} \end{Schunk} Najwazniejsza, zaleta, tego rozwiazania jest mozliwość wielokrotnego uzycia tych samych bloków , \begin{Schunk} \begin{Soutput} <<>>= <<A>> <<A>> @ \end{Soutput} \end{Schunk} \begin{Schunk} \begin{Sinput} > x=c(1,2,3) > x=c(1,2,3) \end{Sinput} \end{Schunk} \subsection{Ukrywanie fragmentu kodu przed Sweave} Skomplikowanym procesem jest ukrywanie kawa lków pliku przed byciem przeprocesowanym przez Sweave. Okazuje sie, jednak, ze jest prosty sposób na ukrycie fragmentów kodu przed byciem przegladanym przez Sweave. Wystarczy ukryć , je w innym pliku. Sweave procesuje jedynie pojedynczy plik, wiec jeśli niechcemy aby jakiś fragment naszego nie , bra l w nim udzia lu wystarczy umieścić go w osobnym pliku i kazać latexowi uzyć go w nastepnym etapie , \begin{verbatim} \input{ukryte1} \end{verbatim} gdzie plik ukryte1.tex zawiera rzeczy nie procesowane przez Sweave. Kiedy naleza loby zadbać o nie procesowanie takiego fragmentu? Np. gdy móg lby zawierać bloki Sweave, które nie powinny być interpretowane. Sweave ponadto czesto nadmiernie miesza w kodzie usuwajac komentarze, z lamania linii , , itp. Równiez zwyczajny znak $@$ stojacy samotnie jest z regu ly przez Sweave usuwany jako znak komentarza w plikach , .rnw. Generalna, zasada, jest aby duze fragmenty nie wymagajace procesowania w Sweave nie poddawać temu procesowi. W przypadkach bardziej skomplikowanych dokumentów o wieloplikowej architekturze, moze to nawet oznaczać konieczność napisanie odpowiednika pliku makefile dla procesu kompilacji. Innym potencjalnym sposobem\footnote{Nie by l sprawdzany przeze mnie} jest przekazanie do parametrów Sweavea by ten do laczy l kod przekazany do parsera, co osiaga sie, komenda, , , \begin{verbatim} \SweaveOpts{keep.source=TRUE}\end{verbatim} Jeszcze innym sposobem jest oszukanie Sweave, aby ten sam wytworzy l to co powinien zastać \LaTeX : \input{verbatim2} Co daje ponizszy wynik: \begin{verbatim} <<>>= getwd() @ \end{verbatim} \subsection{Grafika w Sweave} Pojedynczy blok potrafi zwrócić pojedynczy wykres, do czego wystarczy uruchomienia parametru fig w bloku Sweave \index{Grafika}\index{Grafika!plot} \begin{Schunk} \begin{Sinput} 30 > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') \end{Sinput} \end{Schunk} \includegraphics{../genplots/plot-018} Najwazniejsza, rzecza, przy wykorzystaniu Sweave do tworzenia grafik jest, to aby pamietać by pojedynczy blok posiada l , nie mniej nie wiecej a dok ladnie jeden wykres. Do wykresów mozna przekazywać dowolne parametry obs lugiwane przez , R. Mozna uzyć dodatkowych parametrów. Takim parametrem jest np. Gin odpowiadajacy skalowaniu wykresów , \begin{Schunk} \begin{Soutput} \setkeys{Gin}{width=0.7\textwidth} \end{Soutput} \end{Schunk} Gin = 1.7 \setkeys{Gin}{width=1.7\textwidth} \begin{Schunk} \begin{Sinput} > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') \end{Sinput} \end{Schunk} \includegraphics{../genplots/plot-jeden} Gin = 0.7 \setkeys{Gin}{width=0.7\textwidth} \begin{Schunk} \begin{Sinput} > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') \end{Sinput} \end{Schunk} \includegraphics{../genplots/plot-dwa} Gin = 0.2 \setkeys{Gin}{width=0.2\textwidth} \begin{Schunk} \begin{Sinput} > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') \end{Sinput} \end{Schunk} \includegraphics{../genplots/plot-trzy} \setkeys{Gin}{width=2.4\textwidth} \subsubsection{Etykietowanie + grafika} Niestety niewiele mozna zrobić z grafika, dopóki nie bedzie mozna jej skalować i specjalnie umieszczać w dokumencie. , , Twórcy sweave przyszli jednak z pomocna, d lonia, dla osób, które nie lubia, zostawiać wszystkiego dla Sweave. Jeśli to ta nazwa uzyta zostanie do utworzenia pliku z grafika, tego bloku. Lacz blok sweave posiada etykiete, z nazwa, ac , , , to z opcja, \SweaveOpts{include=FALSE}pozwala to uzytkownikowi tworzyć i dowolnie do laczać wykresy do dokumentu. Przyk ladowo, , jeśli blok ponizszy blok posiada etykiete, test \setkeys{Gin}{width=2.4\textwidth} \includegraphics{../genplots/plot-test} to plik \footnote{Po uwzglednieniu prefiksu} wygladać bedzie nastepuj aco: "genplots/plot-test.pdf". , , , , , \subsubsection{Opcje eksportu grafiki} Na R mozna wymusić aby grafiki by ly eksportowane do podfolderu zamiast w g lównym drzewie. Uzyskuje sie, to opcja:\index{Kompilacja , parametry!parametry}\index{Kompilacja parametry!eksport wykresów} \begin{verbatim} \SweaveOpts{prefix.string=podkatalog/prefix} \end{verbatim} Co spowoduje eksport wykresów do 'podkatalogu' i rozpoczecie nazwy kazdego pliku z uzyciem 'prefix' , 31 \section{Przyk lady} \subsection{Przyk ladowy plik rnw} \begingroup \fontsize{6pt}{9pt}\selectfont \input{rnw_version} \endgroup \subsubsection{Plik bibliografia.bib} \begingroup \fontsize{6pt}{9pt}\selectfont \input{bib_version} \endgroup \subsection{Przyk ladowy plik tex} \begingroup \fontsize{6pt}{9pt}\selectfont \input{tex_version} \endgroup \subsection{Prezentacja Sweave} \newpage \listoffigures \listoftables \printindex \nocite{*} \bibliographystyle{plain} \bibliography{bibliografia} \end{document} 4.3 Prezentacja Sweave \documentclass[hyperref={pdfpagemode=FullScreen}]{beamer} \usepackage{amsmath} \usepackage{amsthm} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{textcomp} \usepackage[utf8]{inputenc} \usepackage{color} \usepackage{polski} \usepackage{graphicx} \usepackage{makeidx} \usetheme{Berkeley} \usepackage{hyperref} \hypersetup{urlColor=blue,pdflatex} %\usepackage{ucs} \author{mgr inz. Piotr Kowalski} \title{Wprowadzenie do Sweave} \makeindex \usepackage{Sweave} \begin{document} \begin{frame} \maketitle \end{frame} \begin{frame} \frametitle{Agenda} \tableofcontents \end{frame} 32 \section{Blok Sweave} \begin{frame}[containsverbatim]{Blok Sweave} <<echo=T,eval=TRUE>>= x=2*3;x @ \end{frame} \section{Grafika w Sweave} %\SweaveOpts{engine=R,eps=FALSE,pdf=TRUE,strip.white=all} %\SweaveOpts{prefix=TRUE,prefix.string=fig-,include=TRUE} \setkeys{Gin}{width=0.7\textwidth} \begin{frame}{Grafika w Sweave} \begin{figure} <<echo=FALSE,fig=TRUE,eval=TRUE>>= x=seq(0,10,by=0.01) plot(x,sin(x),'l') @ \end{figure} \end{frame} \end{document} 33 Spis rysunków 1 2 3 4 5 6 7 8 9 10 Konfiguracja Sweave dla texmaker . . . . . Zaawansowane ustawienia systemu w Win7 Zmienne środowiskowe systemu w Win7 . . Zmienne środowiskowe systemu w Win7 . . Zmienne środowiskowe systemu w Win7 . . Proces kompilacji Sweave . . . . . . . . . . Wykres przy Gin = 1.7 . . . . . . . . . . . Wykres przy Gin = 0.7 . . . . . . . . . . . Wykres przy Gin = 0.2 . . . . . . . . . . . Wykres z etykieta, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 7 7 8 9 14 15 15 16 Podsumowanie parametrów bloku . . . . . . . . . . . . . . . . . . 10 Spis tabel 1 34