238 lines
8.0 KiB
TeX
238 lines
8.0 KiB
TeX
\chapter{R}
|
|
\index{R}
|
|
|
|
% new: Mon Oct 9 07:44:09 UTC 2023
|
|
|
|
% https://raw.githubusercontent.com/wurli/r-best-practice/main/cheatsheet.jpg
|
|
|
|
% ======================================================================
|
|
|
|
Je n'ai certainement pas la prétention de vous enseigner
|
|
les arcanes du \textsl{R project},
|
|
je suis (octobre 2023) en pleine périoe de découverte.
|
|
Mais j'ai déja un projet concret en tête, et ce chapitre sera,
|
|
dans un premier temps, composé de mes notes de voyage.
|
|
|
|
\begin{quote}
|
|
R is a language which bears a passing resemblance to the S language
|
|
developed at AT\&T Bell Laboratories.
|
|
It provides support for a variety of statistical and graphical analyses.
|
|
R is a true computer language which contains a number of control-flow
|
|
constructions for iteration and alternation.
|
|
It allows users to add additional functionality by defining new functions.
|
|
\end{quote}
|
|
|
|
% ======================================================================
|
|
\section{Les bases}
|
|
|
|
Le caractère \texttt{>} est le prompt de R, il vous invite à taper
|
|
des commandes afin qu'il vous explique le sens de la vie.
|
|
On peut définir des variables, leur donner une valeur et faire des calculs
|
|
avec ces variables,
|
|
ce qui est bien suffisant pour commencer. Démonstration~:
|
|
|
|
\begin{verbatim}
|
|
> a <- 22
|
|
> b <- 7
|
|
> a ; b
|
|
[1] 22
|
|
[1] 7
|
|
> a / b
|
|
[1] 3.142857
|
|
\end{verbatim}
|
|
|
|
Les choses semblent simples, nous avons approximé $\pi$.
|
|
Les deux premières lignes affectent des valeurs aux variables a et b.
|
|
La troisième demande l'affichage de ces variables, et la quatrimème
|
|
fait le calcul du nombre qu'il faut apprendre aux sages..
|
|
|
|
% ----------------------------------------------------------------------
|
|
\subsection{Variables}
|
|
|
|
Elles sont auto-vivifiantes\footnote{Si quelqu'un a un meilleur terme,
|
|
je sui preneur}, c'est-à-dire qu'elles existent dès qu'elles
|
|
sont référencées, il n'y a pas de déclaration préalable à faire.
|
|
|
|
Enfin, avec R, il ne faudrait pas parler de variables, mais
|
|
d'objets, lesquels contenant les variables.
|
|
|
|
Ces objets/variables peuvent être de différents types : chaines de caractères,
|
|
valeurs numériques, booléens\dots
|
|
|
|
% ----------------------------------------------------------------------
|
|
|
|
\subsection{Builtins}
|
|
|
|
Quelques fonctions de base, plus ou moins vaguement expliquées.
|
|
|
|
\vspace{1em}
|
|
|
|
\begin{tabular}{|l|p{7cm}|}
|
|
\hline
|
|
\textbf{Fonction} & \textbf{Signification} \\
|
|
\hline
|
|
foo <- 3.14159 & Affectation d'une valeur à une variable \\
|
|
ls() & Liste les objets actuellement chargé. \\
|
|
help(foobar) & Avoir de l'aide sur la chose \textsl{foobar}, %
|
|
abréviation: ?foobar \\
|
|
class(pixel) & Classe de l'objet (numeric, data.frame, ...) \\
|
|
str(foobar) & Information sur l'objet 'foobar' \\
|
|
\hline
|
|
\end{tabular}
|
|
|
|
% ----------------------------------------------------------------------
|
|
|
|
\subsection{Scripting}
|
|
|
|
\textbf{R --vanilla --quiet < mon-script.R}
|
|
|
|
La magie du shebang\index{shebang}
|
|
|
|
% Heredoc ?
|
|
|
|
% ======================================================================
|
|
\section{Un cas concret}
|
|
|
|
Nous disposons d'un fichier SSV
|
|
(Space Separated Values)\footnote{C'est nouveau, ça vient de sortir.}
|
|
provenant d'un système optico-numérique bi-dimensionnel multi-planaire
|
|
(aka Webcam\index{webcam}).
|
|
Et nous voulons en tirer quelques chiffres et graphiques bien
|
|
clinquants,
|
|
par exemple les éventuels rapports entre le rouge et le bleu.
|
|
Pour la facilité de la mise en page, nous allons utiliser un fichier
|
|
contenant seulement huit lignes de données,
|
|
alors qu'un cas réel en comprend quelques centaines de milliers.
|
|
|
|
Voici les quelques lignes de ce fichier~:
|
|
|
|
\begin{verbatim}
|
|
X Y R G B
|
|
0 0 0.000000 0.000000 0.000000
|
|
240 0 3967.814941 1983.907471 0.000000
|
|
480 0 7935.629883 3967.814941 0.000000
|
|
720 0 11903.445312 5951.722656 0.000000
|
|
0 240 0.000000 3967.814941 7935.629883
|
|
240 240 3967.814941 5951.722656 7935.629883
|
|
480 240 7935.629883 7935.629883 7935.629883
|
|
720 240 11903.445312 9919.537109 7935.629883
|
|
\end{verbatim}
|
|
|
|
Vous pouvez remarquer que les noms de colonnes sont sur la première
|
|
ligne du fichier, et qu'il y a deux types de données~:
|
|
les coordonnées x/y qui sont des nombres entiers, et les composantes
|
|
de couleur (r/g/b) qui sont des valeurs flottantes.
|
|
|
|
% ----------------------------------------------------------------------
|
|
Il nous faut maintenant charger ces données dans le logiciel.
|
|
La fonction \texttt{read.delim} est là pour ça, il faut juste lui
|
|
passer les options convenantes pour notre fichier de données~:
|
|
signaler la présence de l'entête avec les noms de colonnes et
|
|
le type du séparateur entre champs.
|
|
|
|
\begin{verbatim}
|
|
> pixels <- read.delim("foo.txt", header=TRUE, sep=' ')
|
|
> pixels
|
|
X Y R G B
|
|
1 0 0 0.000 0.000 0.00
|
|
2 240 0 3967.815 1983.907 0.00
|
|
3 480 0 7935.630 3967.815 0.00
|
|
4 720 0 11903.445 5951.723 0.00
|
|
5 0 240 0.000 3967.815 7935.63
|
|
6 240 240 3967.815 5951.723 7935.63
|
|
7 480 240 7935.630 7935.630 7935.63
|
|
8 720 240 11903.445 9919.537 7935.63
|
|
> class(pixels)
|
|
[1] "data.frame"
|
|
> pixels$G
|
|
[1] 0.000 1983.907 3967.815 5951.723 3967.815 5951.723 7935.630 9919.537
|
|
\end{verbatim}
|
|
|
|
Si vous avez fait cette manipulation, bravo, vous êtes maintenant
|
|
un \textsl{data-scientist} reconnu. Mais il nous reste beaucoup
|
|
de choses à apprendre. Le voyage n'est pas fini.
|
|
Il est temps d'explorer (ou exploiter ?) un peu nos données.
|
|
|
|
|
|
% ======================================================================
|
|
|
|
\section{Statistiques}
|
|
|
|
Oui, c'est un peu pour ça que \textbf{R} a été conçu.
|
|
Hélas ce n'est pas un domaine qui m'est familier, alors ce que
|
|
vous allez lire doit être pris avec des pincettes aussi bien
|
|
du coté des maths sous-jacentes que de la méthodologie.
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
> mean(pixels$R) ; mean(pixels$G)
|
|
[1] 5951.723
|
|
[1] 4959.769
|
|
\end{verbatim}
|
|
|
|
% ======================================================================
|
|
\section{Graphiques}
|
|
|
|
Bah c'est pas simple, alors j'ai activé le \textsl{rach-system} et je
|
|
suis arrivé à ce petit truc qui me permet de faire de la
|
|
\texttt{gif89a}\index{gif89a}, donc je suis content.
|
|
Vous allez voir, c'est assez simple, mais le diable\index{Prada}
|
|
se cache dans les détails, et un peu aussi dans la doc tortueuse.
|
|
|
|
% ----------------------------------------------------------------------
|
|
\subsection{x/y}
|
|
|
|
Un des classiques du genre.
|
|
|
|
\begin{verbatim}
|
|
R --vanilla --quiet << __EOR__
|
|
pixels <- read.delim("cumul.txt", header=TRUE, sep=' ')
|
|
png(filename="cumul.png", width=640, height=480)
|
|
plot(pixels\$X, pixels\$B, pch=".",
|
|
main="$title", sub="tTh 2023",
|
|
xlab="composante rouge",
|
|
ylab="composante bleu")
|
|
quit(save="no")
|
|
__EOR__
|
|
\end{verbatim}
|
|
|
|
Détaillons un peu le script~:
|
|
comme dans l'exemple précédent, nous chargeons nos données dans un
|
|
\textsl{data.frame}. Ensuite nous spécifions une sortie vers un
|
|
fichier image au format PNG\index{PNG}, avec une taille d'image fixée.
|
|
Finalement, nous traçons notre image avec l'instruction \texttt{plot}
|
|
et ses nombreux paramêtres.
|
|
Je vais détailler ceux qui sont utilisés dans cet exemple, et je vous rappelle
|
|
que \texttt{help(plot)} est là pour vous aider.
|
|
|
|
\begin{itemize}
|
|
\item \texttt{pch} : type de la plume utilisée
|
|
\item \texttt{main} : titre principal de la page
|
|
\item \texttt{sub} : sous-titre, placé tout en bas
|
|
\item \texttt{xlab} : label de l'axe des X
|
|
\item \texttt{ylab} : label de l'axe des Y
|
|
\end{itemize}
|
|
|
|
Avec ça, nous pouvons déja faire quelgues diagrammes corrects
|
|
\footnote{Voire même on peut tenter de la gif89a\index{gif89a}},
|
|
mais d'autres paramêtres devraient retenir notre attention, comme
|
|
la gestion des marges et des couleurs, comment exporter proprement
|
|
vers \LaTeX, peut-on faire de la 3D\index{3D}, \dots
|
|
|
|
% ----------------------------------------------------------------------
|
|
|
|
\subsection{Histogramme}
|
|
|
|
hist(datas\$V3, breaks=50)
|
|
|
|
% ======================================================================
|
|
|
|
\section{Interface avec l'OS}
|
|
|
|
|
|
|
|
|
|
% ======================================================================
|
|
|