Blog (29)
Komentarze (476)
Recenzje (0)
@iluzionR jak raport

R jak raport

16.06.2011 | aktual.: 19.06.2011 19:45

Wstęp

Tytułowe raporty, sprawozdania, artykuły można pisać/tworzyć przy pomocy wielu narzędzi. Najpopularniejszym jest pakiet MS Office. Dane z prób, eksperymentów wprowadzamy do Excela, przeprowadzamy obliczenia, analizy, a następnie wyniki kopiujemy do Worda. To najczęściej wykorzystywany sposób postępowania. Prosty i skuteczny. Przynajmniej w przypadku niewielkiej ilości raportów.

Duże ilości raportów można tworzyć w sposób programowy, np. przy użyciu narzędzia dla języka Python -- ReportLab. Jest to rozwiązanie trudniejsze, ale niezwykle efektywne.

Trzeci sposób, będący tematem tego wpisu, to rozwiązanie pośrednie, kompromis pomiędzy wygodą, a efektywnością.

R jak raport

Sweave jest narzędziem pozwalającym na osadzenie kodu R w dokumentach LaTeX. GNU R jest językiem programowania (dialektem S) i środowiskiem do obliczeń statystycznych, analizy danych oraz wizualizacji wyników.

Podstawowa wersja R dostępna jest na stronie R-project jako produkt open source. Na podstawie wersji otwartoźródłowej rozwijane są również komercyjne edycje enterprise jak np. Revolution Analytics.

387580

Środowisko R dostępne jest dla systemów Linux, Mac OS oraz Windows. Użytkownicy edytora Emacs (opisywanego wcześniej na blogu) mogą skorzystać z rozszerzenia ESS (Emacs Speaks Statistics). R ceniony jest za dojrzałość i stabilność. Stanowi pewien standard w środowisku statystyków. Często wykorzystywany jest też w innych dziedzinach nauki, np. biologii.

Wpis ten nie jest kursem R, a jedynie niewielkim pokazem możliwości środowiska R i pakietu Sweave. Mnóstwo informacji na temat R‑project znajduje się w internecie (również w języku polskim). Ze swojej strony polecam dwie świetne pozycje wydanictwa O'REILLY: R Cookbook oraz R in a Nutshell.

Instalacja i pierwsze uruchomienie

Wymagania: Zainstalowane środowisko LaTeX, np. MiKTeX dla Windows.

Instalacja R w środowisku Windows nie wyróżnia się niczym szczególnym. Pobieramy instalator i instalujemy podobnie jak inne programy. Sweave jest aktualnie częścią pakietu R.

Sweave

Sweave można zapisać matematycznie jako Sweave = R . LaTeX, gdyż jest to w pewnym sensie złożenie R i LaTeX-a. Ściśle rzecz ujmując, Sweave jest narzędziem, które pozwala na osadzenie kodu R w dokumentach LaTeX. Celem Sweave jest tworzenie dynamicznych raportów, które są automatycznie aktualizowane, jeśli dane lub przeprowadzana analiza ulega zmianie.

Dokumenty Sweave posiadają zazwyczaj rozszerzenie .Rnw, .rnw, .Snw, .snw. Fragmenty kodu R zawarte w tych plikach są wykonywane w R, a rezultaty, wykresy, tabele itp. automatycznie wstawiane w końcowym dokumencie -- czyli pliku .tex, który wystarczy skompilować przy pomocy LaTeX-a.

Zasada działania polecenia Sweave:

foo.snw -> (Sweave) -> foo.tex -> (PDFLaTeX) -> foo.pdf

Fragmenty kodu R zaczynamy od znacznika <<name>>= lub po prostu <<>>=, a kończymy znakiem @. Nazwane fragmenty kodu możemy wykorzystać ponownie przy pomocy <<name>>. Cała reszta dokumentu jest traktowana przez R jako komentarz.

Innym sposobem zapisu (bardziej intuicyjnym dla użytkowników LaTeX-a) są znaczniki \begin{Scode} \end{Scode} (Scode, ponieważ R jest dialektem języka S). Pliki uwzględniające tę formę zapisu posiadają najczęściej rozszerzenie .Stex.

Ten opis powinien wystarczyć, aby rozpocząć pracę ze Sweave. Cała reszta to kwestia nauki LaTeX-a i R. Jeśli znasz już podstawy LaTeX-a szybko odkryjesz moc i wygodę drzemiącą w R.

Zalety Sweave

* Powtarzalność wyników * Efektywność * Niezawodność

Sweave wpisuje się w koncepcję Literate programming, o której była już mowa na tym blogu.

Przykład

Teorię najlepiej zrozumieć na przykładzie. Prześledźmy zatem najczęściej przytaczany przykład.

\documentclass[a4paper]{article}

\title{Sweave Example 1}
\author{Friedrich Leisch}

\begin{document}

\maketitle

In this example we embed parts of the examples from the
\texttt{kruskal.test} help page into a \LaTeX{} document:

<<>>=
data(airquality)
kruskal.test(Ozone ~ Month, data = airquality)
@
which shows that the location parameter of the Ozone 
distribution varies significantly from month to month. Finally we
include a boxplot of the data:

\begin{center}
<<fig=TRUE,echo=FALSE>>=
boxplot(Ozone ~ Month, data = airquality)
@
\end{center}

\end{document}

Przykład a) plik Snw

To samo przy użyciu znaczników Scode możemy zapisać jako:

\documentclass[a4paper]{article}

\title{Sweave Example 1}
\author{Friedrich Leisch}

\begin{document}

\maketitle

In this example we embed parts of the examples from the
\texttt{kruskal.test} help page into a \LaTeX{} document:

\begin{Scode}
data(airquality)
kruskal.test(Ozone ~ Month, data = airquality)
\end{Scode}
which shows that the location parameter of the Ozone 
distribution varies significantly from month to month. Finally we
include a boxplot of the data:

\begin{center}
\begin{Scode}{fig=TRUE,echo=FALSE}
boxplot(Ozone ~ Month, data = airquality)
\end{Scode}
\end{center}

\end{document}

Przykład b) Plik Stex

Opcja echo=FALSE oznacza, że fragment ten nie będzie zawarty w wynikowym pliku.

Zapisujemy przykład w wybranym katalogu, uruchamiamy R i wpisujemy polecenie:

Sweave("C:\\Users\\Krystian\\Desktop\\raport\\example-1.Snw")

uwzględniając właściwą ścieżkę. Po wciśnięciu klawisza Enter powinien pojawić się rezultat jak na zrzucie ekranu poniżej:

387608

W wyniku działania polecenia w katalogu Dokumenty powstają dwa pliki: plik tex oraz plik pdf z wykresem.

Otwieramy plik tex w ulubionym edytorze LaTeX-a, kompilujemy przy pomocy PDFLaTeX i...

387611

! LaTeX Error: File `Sweave.sty' not found.

Spokojnie, bez paniki;) Plik Sweave.sty znajduje się w katalogu R. Zwykle jest to  [code]C:\Program Files\R\R-2.13.0\share\texmf\tex\latex\[/code] Skopiuj go do tego samego folderu, w którym znajduje się źródło .tex wygenerowane przez polecenie Sweave, czyli domyślnie Dokumenty w systemie Windows Vista/7.

Po kompilacji otrzymujemy następujący plik PDF.

Bonus

Programistów/hobbystów programowania w języku Python może zainteresować pakiet Pweave oraz pyreport. Literate programming with Python.

Wybrane dla Ciebie
Komentarze (1)