Wprowadzenie do Sweave mgr inż. Piotr Kowalski 16 maja 2012 1
Streszczenie Krótkie wprowadzenie do używania Sweave, pakietu umożliwiajacego po l aczenie 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 uzupe lnień oraz testów na Windows Wersja 0.2-13.04.2012 - Kowalski Piotr - druga wersja z uzupe lniona 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 pierwsze prace nad dokumentem. Uzupe lniono tworzenie grafiki w Sweave oraz importowanie jej do Latexa. Do l aczono również kod prezentacji Sweave 2
Spis treści 1 Czym jest Sweave 4 2 Instalacja Sweave 4 2.1 Automatyzacja kompilacji Sweave................. 4 2.1.1 Automatyzacja kompilacji dla TEXMaker......... 4 2.1.2 Automatyzja kompilacji dla Miktex 2.9, LEd na platformie Windows......................... 5 2.2 Zasada dzia lania Sweave....................... 9 3 Programowanie w Sweave 9 3.1 Podstawowy blok Sweave...................... 9 3.1.1 Parametry bloku....................... 10 3.2 Blok linijkowy Sweave........................ 11 3.3 Powtarzanie bloków......................... 11 3.4 Ukrywanie fragmentu kodu przed Sweave............. 12 3.5 Grafika w Sweave........................... 12 3.5.1 Etykietowanie + grafika................... 13 3.5.2 Opcje eksportu grafiki.................... 13 4 Przyk lady 17 4.1 Przyk ladowy plik rnw........................ 17 4.1.1 Plik bibliografia.bib..................... 23 4.2 Przyk ladowy plik tex......................... 23 4.3 Prezentacja Sweave.......................... 30 3
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 przyk ladem tzw. programowania objaśniajacego 1. 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 z lożonych dokumentów L A TEX. W poniższym instruktażu zak ladam milczaco, że użytkownik posiada podstawowa znajomość zarówno pakietu R jak i jezyka L A TEX. Podobnie za loż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 do l aczenie 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 należy jeszcze do l aczyć pakiet stylu do źróde l kompilacyjnych Latexa. 2.1 Automatyzacja kompilacji Sweave W zależności od, stosowanego przez użytkownika, edytora L A TEXróżnie 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: R CMD Sweave %.rnw Zaprezentowana powyżej komenda powinna dzia lać w wi ekszości systemów unixowych 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 obs lużyć ca lość procesu tworzenia dokumentu co można obserwować poniżej. 2 1 ang. literate programming 2 evince jest lekka przegladark a plików pdf 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 Latexowego czyli Miktex+LEd. Proces tej automatyzacji jest trzy krokowy i powinien wygladać podobnie dla innych środowisk kompilacji L A TEX. Udost epnie 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ć możliwość wykonywana poleceń jego jezyka. Jeśli natomiast pojawi sie komunikat, ż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\R- X.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 w laś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 edycje. UWAGA. Nie należy niczego kasować z tej zmiennej. Usuniecie jej zawartości może spowodować uszkodzenie 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 sta l sie widoczny w systemie. 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 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 zak ladce zawierajacej katalogi zarzadzane przez Miktex dodać nowy 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 udost epnia w lasne skrypty kompilacyjne. Po lewo na pasku znajduje si e 5 kolejnych przycisków o nazwie U. Po najechaniu na nie pojawia si e informacja, że 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ć 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
%.rnw Sweave %.rnw %.tex pdflatex %.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ód lowy, 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 dok ladniej 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 dzia lania Sweave Poniższy diagram prezentuje zasade dzia lania procesu kompilacji dokumentu Rnw zawierajacego kod dla pakietu Sweave. W pierwszej cześci procesu plik rnw. t lumaczony jest na plik TEXowski oraz eksportowane sa wszystkie wykresy. W dalszej cześci nastepuje kompilacja programu pdflatex. Ca lość 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 L A TEXgdyby nie do l aczone 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 w lasna dla bloku jak i szereg parametrów Na przyk lad: 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 podzia l pliku wynikowego, wartość TRUE oznacza istnienie podzia lu 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^2 [1] 1 4 9 W bloku można wykonywać dowolne komendy j ezyka R. W miar e rozwoju tego dokumentu obserwować b edziemy, ż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 przyk ladzie poniższego kodu: <<param=value>>= x=c(1,2,3) x Przy w l aczonym echo: > x [1] 1 2 3 i wy l aczonym: [1] 1 2 3 Przy w l aczonym eval: > x [1] 1 2 3 10
i wy l aczonym: > x Przy results verbatim: > x [1] 1 2 3 results tex: > x [1] 1 2 3 results hide: > x [1] 1 2 3 3.2 Blok linijkowy Sweave Możliwe jest również używanie R do wype lniania tekstów linijkowych. Np. Pierwiastek z 2: 2 = 1.4142135623731. do wykonania tego potrzebny jest blok \Sexpr{ }. Blok ten wyświetla zawsze pojedynczy element, pierwszy w wektorze odpowiedzi. Dla sygna lu \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) Najważniejsza zaleta tego rozwiazania jest możliwość wielokrotnego użycia tych samych bloków <<>>= <<A>> <<A>> 11
3.4 Ukrywanie fragmentu kodu przed Sweave Skomplikowanym procesem jest ukrywanie kawa lkó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 bra l w nim udzia lu 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ża 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ównież zwyczajny znak stojacy samotnie jest z regu ly 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 sposobem 3 jest przekazanie do parametrów Sweavea by ten do l aczy l kod przekazany do parsera, co osiaga sie komenda \SweaveOpts{keep.source=TRUE} Jeszcze innym sposobem jest oszukanie Sweave, aby ten sam wytworzy l to co powinien zastać L A TEX: <<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 by l sprawdzany przeze mnie 12
sin(x) 1.0 0.5 0.0 0.5 1.0 0 2 4 6 8 10 x Najważniejsza 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 można przekazywać dowolne parametry obs lugiwane 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 d lonia 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. L acz ac to z opcja \SweaveOpts{include=FALSE} pozwala to użytkownikowi tworzyć i dowolnie do l aczać wykresy do dokumentu. Przyk ladowo, 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 by ly eksportowane do podfolderu zamiast w g lównym drzewie. Uzyskuje sie to opcja: 4 Po uwzgl ednieniu prefiksu 13
> x=seq(0,10,by=0.01) > plot(x,sin(x),'l') sin(x) 1.0 0.5 0.0 0.5 1.0 0 2 4 6 8 x 14 Rysunek 7: Wykres przy Gin = 1.7
> x=seq(0,10,by=0.01) > plot(x,sin(x),'l') sin(x) 1.0 0.5 0.0 0.5 1.0 0 2 4 6 8 10 x Rysunek 8: Wykres przy Gin = 0.7 > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') sin(x) 1.0 0.5 0.0 0.5 1.0 0 2 4 6 8 10 x Rysunek 9: Wykres przy Gin = 0.2 15
cos(x) 1.0 0.5 0.0 0.5 1.0 0 2 4 6 8 10 x Rysunek 10: Wykres z etykieta 16
\SweaveOpts{prefix.string=podkatalog/prefix} Co spowoduje eksport wykresów do podkatalogu i rozpocz ecie nazwy każdego pliku z użyciem prefix 4 Przyk lady 4.1 Przyk ladowy 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
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ólnodost epnym 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 si e 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 wi ekszoś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}. 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 18
tej zmiennej (obrazek \ref{screen.win7.path}) postawić znak ';' oraz wkleić ściezk e 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} Podobnie jak \TeX Maker równiez i LEd udost epnia w lasne skrypty kompilacyjne. Po lewo na pasku znajduje si e 5 kolejnych przycisków o nazwie U. Po najechaniu na nie pojawia si e 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 si e katalog w którym znajduje si e 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ć si e b edzie 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 nast epnie 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 cz eści skupimy si e 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 si e 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: <<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 j ezyka R. W miar e rozwoju tego dokumentu obserwować b edziemy, 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 narz edzie 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 si e 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 nast epnym 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 l kod przekazany do parsera, co osiaga sie komenda \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. 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} Lacz ac 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 rozpocz ecie 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 Przyk ladowy 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ólnodost epnym 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 si e 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 wi ekszoś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ć 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}. 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ć ściezk e 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 udost epnia w lasne skrypty kompilacyjne. Po lewo na pasku znajduje si e 5 kolejnych przycisków o nazwie U. Po najechaniu na nie pojawia si e 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 si e katalog w którym znajduje si e 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ć si e b edzie 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 nast epnie 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} \caption{proces kompilacji Sweave} \label{diag.sweave.compile} \end{figure} \section{programowanie w Sweave} W tej cz eści skupimy si e 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 si e 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: 27
\begin{soutput} <<>>= x=c(1,2,3) x^2 \end{soutput} Wyprodukuje \begin{sinput} > x^2 \end{sinput} \begin{soutput} [1] 1 4 9 \end{soutput} W bloku mozna wykonywać dowolne komendy j ezyka R. W miar e rozwoju tego dokumentu obserwować b edziemy, 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 narz edzie 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{soutput} <<param=value>>= x=c(1,2,3) x \end{soutput} Przy w laczonym echo: \begin{sinput} > x \end{sinput} \begin{soutput} [1] 1 2 3 \end{soutput} i wy laczonym: \begin{soutput} [1] 1 2 3 \end{soutput} 28
Przy w laczonym eval: \begin{sinput} > x \end{sinput} \begin{soutput} [1] 1 2 3 \end{soutput} i wy laczonym: \begin{sinput} > x \end{sinput} Przy results verbatim: \begin{sinput} > x \end{sinput} \begin{soutput} [1] 1 2 3 \end{soutput} results tex: \begin{sinput} > x \end{sinput} \begin{soutput} [1] 1 2 3 \end{soutput} results hide: \begin{sinput} > x \end{sinput} \begin{soutput} [1] 1 2 3 \end{soutput} \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{soutput} <<>>= \end{soutput} Jest niczym innym jak przypisaniem. Standardowy blok jest anonimowy. Mozna jednak nadać im nazwy. 29
\begin{soutput} <<A>>= x=c(1,2,3) \end{soutput} \begin{sinput} \end{sinput} Najwazniejsza zaleta tego rozwiazania jest mozliwość wielokrotnego uzycia tych samych bloków \begin{soutput} <<>>= <<A>> <<A>> \end{soutput} \begin{sinput} \end{sinput} \subsection{ukrywanie fragmentu kodu przed Sweave} Skomplikowanym procesem jest ukrywanie kawa lków pliku przed byciem przeprocesowanym przez Sweave. Okazuje si e 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 nast epnym 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{sinput} 30
> x=seq(0,10,by=0.01) > plot(x,sin(x),'l') \end{sinput} \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{soutput} \setkeys{gin}{width=0.7\textwidth} \end{soutput} Gin = 1.7 \setkeys{gin}{width=1.7\textwidth} \begin{sinput} > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') \end{sinput} \includegraphics{../genplots/plot-jeden} Gin = 0.7 \setkeys{gin}{width=0.7\textwidth} \begin{sinput} > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') \end{sinput} \includegraphics{../genplots/plot-dwa} Gin = 0.2 \setkeys{gin}{width=0.2\textwidth} \begin{sinput} > x=seq(0,10,by=0.01) > plot(x,sin(x),'l') \end{sinput} \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 blok sweave posiada etykiete z nazwa, to ta nazwa uzyta zostanie do utworzenia pliku z grafika tego bloku. Lacz 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 rozpocz ecie nazwy kazdego pliku z uzyciem 'prefix' 31