R possède une variété de structures de données. Ici, nous aborderons certains des plus fréquemment
A utilisé des structures pour vous donner un aperçu de R avant de plonger dans la
détails. De cette façon, vous pouvez au moins commencer par des exemples significatifs,
Même si l'histoire complète derrière eux doit attendre.
1.4.1 Vecteurs, le cheval de bataille R
Le type de vecteur est vraiment le cœur de R. Il est difficile d'imaginer le code R, ou même
Une session R interactive, qui n'implique pas de vecteurs.
Les éléments d'un vecteur doivent tous avoir le même mode ou le type de données. Toi
Peut avoir un vecteur composé de trois chaînes de caractères (de mode)
Ou trois éléments entiers (d'entier de mode), mais pas un vecteur avec un nombre entier
Élément et deux éléments de chaîne de caractères.
Nous parlerons plus sur les vecteurs au chapitre 2.


1.4.1.1 Scalars
Les scalaires ou les nombres individuels n'existent pas réellement dans R. Comme l'ont mentionné l'oreille-
Lier, ce qui semble être des nombres individuels sont en fait des vecteurs à un élément.
Considérer ce qui suit:
> X <-8
> X
[1] 8
Rappelons que le [1] signale ici que la rangée de chiffres suivante commence
Avec l'élément 1 d'un vecteur - dans ce cas,
X [1]. Donc, vous pouvez voir que R était en effet
Traitement
X comme vecteur, bien qu'un vecteur avec un seul élément.

 

1.4.2 Cordes de caractères
Les chaînes de caractères sont en fait des vecteurs à élément unique du caractère en mode,
(Plutôt que mode numérique):
> X <- c (5,12,13)
> X
[1] 51213
> Longueur (x)
[1] 3
> Mode (x)
[1] "numeric"
> Y <- "abc"
> Y
[1] "abc"
> Longueur (y)
[1] 1
> Mode (y)
[1] "caractère"
> Z <- c ("abc", "29 88")
> Longueur (z)
[1] 2
> Mode (z)
[1] "caractère"
Dans le premier exemple, nous créons un vecteur x de nombres, donc de mode numérique.
Ensuite, nous créons deux vecteurs de mode:
Y est un élément unique (c'est-à-dire,
One-string) vector, et
Z se compose de deux cordes.
R possède diverses fonctions de manipulation de chaîne. Beaucoup s'occupent de mettre
Se raccrochent ou les séparent, comme les deux montrés ici:
> U <- coller ("abc", "de", "f") # concaténer les chaînes
> Vous
[1] "abc de f"
> V <- strsplit (u, "") # divise la chaîne selon les blancs
> V
[[1]]
[1] "abc" "de" "f"
Les chaînes seront traitées en détail au chapitre 11.


1.4.3 Matrices
Une matrice R correspond à la notion mathématique du même nom: a
Tableau rectangulaire de nombres. Techniquement, une matrice est un vecteur, mais avec deux

Chapitre 1
Attributs supplémentaires: le nombre de lignes et le nombre de colonnes. Ici
Est un exemple de code matriciel:
> M <- rbind (c (1,4), c (2,2))
> M
[, 1] [, 2]
[1,] 1 4
[2,] 2 2
> M%
*
% C (1,1)
[,1]
[1,] 5
[2,] 4
Tout d'abord, nous utilisons la fonction rbind () (pour ligne de ligne) pour construire une matrice à partir de
Deux vecteurs qui serviront de rangées, enregistrant le résultat dans
M. (Une correspondance
Fonction de fonctionnement
Cbind (), associe plusieurs colonnes à une matrice.) Puis, entrez
Le nom de la variable seul, que nous connaissons, va imprimer la variable, les confirmations
Que la matrice prévue a été produite. Enfin, nous calculons le produit matriciel
Du vecteur
(1,1) et m. L'opérateur multiplicateur de matrice, qui
Vous pouvez le savoir à partir de cours d'algèbre linéaire, est
%
*
% Dans R.
Les matrices sont indexées en double sous-scriptures, comme en C / C ++,
Bien que les indices commencent à 1 au lieu de 0.
> M [1,2]
[1] 4
> M [2,2]
[1] 2
Une caractéristique extrêmement utile de R est que vous pouvez extraire des sous-métrages
À partir d'une matrice, autant que vous extrayez des sous-vecteurs de vecteurs. Voici un
Exemple:
> M [1,] # ligne 1
[1] 14
> M [, 2] # colonne 2
[1] 42
Nous parlerons plus à propos des matrices au chapitre 3.


1.4.4 Listes
Comme un vecteur R, une liste R est un conteneur pour les valeurs, mais son contenu peut être
Éléments de différents types de données. (Les programmeurs C / C ++ noteront l'analogie
À une structure C.) Les éléments de la liste sont accessibles en utilisant les noms en deux parties, qui sont
Indiqué avec le signe dollar
$ En R. Voici un exemple rapide:
> X <- liste (u = 2, v = "abc")
> X

$ U
[1] 2
$ V
[1] "abc"
> X $ u
[1] 2
L'expression x $ u se réfère au composant u dans la liste x. Ce dernier contient
Un autre composant, noté par
V.
Une utilisation commune des listes consiste à combiner plusieurs valeurs en un seul paquet
Qui peut être retourné par une fonction. Ceci est particulièrement utile pour les statistiques
Fonctions, qui peuvent avoir des résultats élaborés. À titre d'exemple, considérons les R
Fonction d'histogramme de base,
Hist (), introduit dans la section 1.2. Nous avons appelé le
Fonction sur le jeu de données intégré du Nil River de R:
> Hist (Nil)
Cela a produit un graphique, mais hist () renvoie également une valeur, que nous pouvons enregistrer:
> Hn <- ​​hist (Nil)
Qu'y a-t-il dans hn? Nous allons jeter un coup d'oeil:
> Imprimer (hn)
$ Breaks
[1] 400 500 600 700 800 900 1000 1100 1200 1300 1400
Nombre de dollars
[1] 105202519121161
$ Intensités
[1] 9.999998e-05 0.000000e + 00 5.000000e-04 2.000000e-03 2.500000e-03
[6] 1.900000e-03 1.200000e-03 1.100000e-03 6.000000e-04 1.000000e-04
$ Densité
[1] 9.999998e-05 0.000000e + 00 5.000000e-04 2.000000e-03 2.500000e-03
[6] 1.900000e-03 1.200000e-03 1.100000e-03 6.000000e-04 1.000000e-04
$ Mids
[1] 450 550 650 750 850 950 1050 1150 1250 1350
$ Xname
[1] "Nil"
$ Equidist
[1] VRAI
13

Chapitre 1
Attr (, "classe")
[1] "histogramme"
N'essayez pas de comprendre tout cela tout de suite. Pour l'instant, le point est que,
En plus de faire un graphique,
Hist () renvoie une liste avec un certain nombre de composants.
Ici, ces composants décrivent les caractéristiques de l'histogramme. Pour
Exemple, le
Break Components nous indique où les bacs dans l'histogramme
Début et fin, et le
Le nombre de composantes est le nombre d'observations dans
Chaque bac.
Les concepteurs de R ont décidé de regrouper l'ensemble des informations renvoyées
par
Hist () dans une liste R, à laquelle on peut accéder et manipuler par R
Commandes via le signe dollar.
> Hn
Rappelez-vous que nous pourrions également imprimer
Et simplement en tapant son nom:
Mais une alternative plus compacte pour les listes d'impression comme ceci est str ():
> Str (hn)
Liste des 7
$ Breaks: num [1:11] 400 500 600 700 800 900 1000 1100 1200 1300 ...
$ Count: int [1:10] 105202519121161
$ Intensités: num [1:10] 0.0001 0 0.0005 0.002 0.0025 ...
$ Densité: num [1:10] 0.0001 0 0.0005 0.002 0.0025 ...
$ Mids: num [1:10] 450 550 650 750 850 950 1050 1150 1250 1350
$ Xname: chr "Nile"
$ Equidist: logi TRUE
- attr (
*
, "Classe") = chr "histogramme"
Ici str signifie structure. Cette fonction montre la structure interne de
Tout objet R, pas seulement des listes.


1.4.5 Cadres de données
Un ensemble de données typique contient des données de différents modes. Dans les données d'un employé
Par exemple, nous pouvons avoir des données de chaîne de caractères, telles que les employés
Les noms et les données numériques, comme les salaires. Donc, même si un ensemble de données (disons)
50 employés avec 4 variables par travailleur ont l'apparence d'un 50-par-4
Matricielle, il ne se qualifie pas comme tel dans R, car il mélange des types.
Au lieu d'une matrice, nous utilisons un cadre de données. Un cadre de données dans R est une liste, avec
Chaque composant de la liste étant un vecteur correspondant à une colonne dans notre
"Matrice" de données. En effet, vous pouvez créer des images de données de cette manière:
> D <- data.frame (liste (kids = c ("Jack", "Jill"), ages = c (12,10)))
> D
Âge des enfants
1 Jack 12

2 Jill 10
> D $ ages
[1] 12 10
Généralement, cependant, les images de données sont créées en lisant dans un ensemble de données de
Un fichier ou une base de données.
Nous parlerons davantage des cadres de données au chapitre 5.


1.4.6 Cours
R est un langage orienté objet. Les objets sont des instances de classes. Les cours sont
Un peu plus abstraite que les types de données que vous avez rencontrés jusqu'ici. Ici, nous allons regarder
Brièvement au concept en utilisant les classes S3 de R. (Le nom provient de leur utilisation
Dans l'ancien langage S, version 3, qui a inspiré R.) La plupart des R
Est basé sur ces classes, et ils sont extrêmement simples. Leurs instances
Sont simplement des listes R mais avec un attribut supplémentaire: le nom de la classe.
Par exemple, nous avons noté précédemment que la sortie (non dynamique) de la
La fonction hist () histogramme est une liste avec divers composants, tels que la rupture et
Comptez les composants. Il y avait aussi un attribut, qui spécifiait la classe de
La liste, à savoir
Histogramme.
> Imprimer (hn)
$ Breaks
[1] 400 500 600 700 800 900 1000 1100 1200 1300 1400
Nombre de dollars
[1] 105202519121161
...
...
Attr (, "classe")
[1] "histogramme"
À ce stade, vous vous demandez peut-être: "Si les objets de classe S3 ne sont que des listes,
Pourquoi avons-nous besoin d'eux? "La réponse est que les classes sont utilisées par les génériques
les fonctions. Une fonction générique signifie une famille de fonctions, tout en servant un
À des fins similaires mais adaptées à une classe spécifique.
Une fonction générique couramment utilisée est
résumé(). Un utilisateur R qui veut
Utiliser une fonction statistique, comme
Hist (), mais n'est pas sûr de savoir comment faire face à son
Sortie (qui peut être volumineuse), peut simplement appeler
Résumé () sur la sortie,
Qui n'est pas seulement une liste mais une instance d'une classe S3.
le
La fonction résumé (), à son tour, est en fait une famille de synthèse
Fonctions, chaque manipulation des objets d'une classe particulière. Quand vous appelez
résumé()
Sur certaines sorties, R cherche une fonction récapitulative appropriée à la classe
À la main et l'utilise pour donner une représentation plus amicale de la liste. Ainsi, appeler
résumé()
Sur la sortie de hist () produit un résumé adapté à cela
Fonction et appel
Summary () sur la sortie de la fonction de régression lm ()
Produit un résumé approprié pour cette fonction.
Mise en route 15

La fonction plot () est une autre fonction générique. Vous pouvez utiliser plot () on
À peu près tout objet R. R trouvera une fonction de traçage appropriée basée
Sur la classe de l'objet.
Les cours servent à organiser des objets. Ensemble avec des fonctions génériques,
Ils permettent de développer un code fl exible pour gérer une variété de différents
Mais des tâches connexes. Le chapitre 9 couvre les classes en profondeur.