Recherche…


Variables, structures de données et opérations de base

Dans R, les objets de données sont manipulés à l'aide de structures de données nommées. Les noms des objets peuvent être appelés "variables" bien que ce terme n'ait pas de signification particulière dans la documentation R officielle. Les noms R sont sensibles à la casse et peuvent contenir des caractères alphanumériques ( az , Az , 0-9 ), le point / point ( . ) Et le trait de soulignement ( _ ). Pour créer des noms pour les structures de données, nous devons suivre les règles suivantes:

  • Les noms qui commencent par un chiffre ou un trait de soulignement (par exemple 1a ), ou les noms qui sont des expressions numériques valides (par exemple .11 ), ou des noms avec des tirets ( « - ») ou les espaces ne peuvent être utilisés quand ils sont cités: `1a` et `.11` . Les noms seront imprimés avec des backticks:

     list( '.11' ="a")
     #$`.11`
     #[1] "a"
    
  • Toutes les autres combinaisons de caractères alphanumériques, de points et de traits de soulignement peuvent être utilisées librement, lorsque la référence avec ou sans point de repère pointe vers le même objet.

  • Noms commençant par . sont considérés comme des noms de systèmes et ne sont pas toujours visibles à l'aide de la fonction ls() .

Il n'y a pas de restriction sur le nombre de caractères dans un nom de variable.

Voici quelques exemples de noms d’objets valides: foobar , foo.bar , foo_bar , .foobar

Dans R, des variables sont affectées à l'aide de l'opérateur d'affectation par infixes <- . L'opérateur = peut également être utilisé pour affecter des valeurs à des variables, mais son utilisation correcte est d'associer des valeurs aux noms de paramètres dans les appels de fonction. Notez que l'omission d'espaces autour des opérateurs peut créer de la confusion pour les utilisateurs. L'expression a<-1 est analysée comme une affectation ( a <- 1 ) plutôt que comme une comparaison logique ( a < -1 ).

> foo <- 42
> fooEquals = 43

Donc, foo se voit attribuer la valeur 42 . Taper foo dans la console affichera 42 , tandis que taper fooEquals affichera 43 .

> foo
[1] 42
> fooEquals
[1] 43

La commande suivante affecte une valeur à la variable nommée x et imprime la valeur simultanément:

> (x <- 5) 
[1] 5
# actually two function calls: first one to `<-`; second one to the `()`-function
> is.function(`(`)
[1] TRUE  # Often used in R help page examples for its side-effect of printing.

Il est également possible d’affecter des variables à l’aide de -> .

> 5 -> x
> x
[1] 5
> 

Types de structures de données

Il n'y a pas de types de données scalaires dans R. Les vecteurs de longueur-un agissent comme des scalaires.

  • Vecteurs: Les vecteurs atomiques doivent être des séquences d'objets de même classe: une suite de nombres, une suite de logiques ou une suite de caractères. v <- c(2, 3, 7, 10) , v2 <- c("a", "b", "c") sont tous deux des vecteurs.
  • Matrices: Une matrice de nombres, de logiques ou de caractères. a <- matrix(data = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), nrow = 4, ncol = 3, byrow = F) . Comme les vecteurs, la matrice doit être composée d'éléments de même classe. Pour extraire des éléments d'une matrice, les lignes et les colonnes doivent être spécifiées: a[1,2] renvoie [1] 5 qui est l'élément de la première ligne, deuxième colonne.
  • Listes: concaténation de différents éléments mylist <- list (course = 'stat', date = '04/07/2009', num_isc = 7, num_cons = 6, num_mat = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), results = c(30, 19, 29, NA, 25, 26 ,27) ) . L'extraction d'éléments d'une liste peut être effectuée par nom (si la liste est nommée) ou par index. Dans l'exemple donné, mylist$results et mylist[[6]] obtiennent le même élément. Attention: si vous essayez mylist[6] , R ne vous donnera pas d'erreur, mais il extraira le résultat sous forme de liste. Alors que mylist[[6]][2] est autorisé (il vous donne 19), mylist[6][2] vous donne une erreur.
  • data.frame: objet avec des colonnes qui sont des vecteurs de même longueur, mais (éventuellement) différents types. Ce ne sont pas des matrices. exam <- data.frame(matr = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), res_S = c(30, 19, 29, NA, 25, 26, 27), res_O = c(3, 3, 1, NA, 3, 2, NA), res_TOT = c(30,22,30,NA,28,28,27)) . Les colonnes peuvent être lues au moyen de l' exam$matr nom exam$matr , de l' exam[, 'matr'] ou de l' exam[1] index exam[1] , exam[,1] . Les lignes peuvent également être lues par exam['rowname', ] nom exam['rowname', ] ou par index exam[1,] . Les dataframes ne sont en réalité que des listes avec une structure particulière (composants rownames-attribute et equal length)

Opérations communes et quelques conseils de prudence

Les opérations par défaut sont effectuées élément par élément. Voir ?Syntax pour les règles de priorité des opérateurs. La plupart des opérateurs (et d'autres fonctions dans la base R) ont des règles de recyclage qui autorisent des arguments de longueur inégale. Compte tenu de ces objets:

Exemple d'objets

> a <- 1
> b <- 2
> c <- c(2,3,4)
> d <- c(10,10,10)
> e <- c(1,2,3,4)
> f <- 1:6
> W <- cbind(1:4,5:8,9:12)
> Z <- rbind(rep(0,3),1:3,rep(10,3),c(4,7,1))

Quelques opérations vectorielles

> a+b # scalar + scalar
[1] 3
> c+d # vector + vector
[1] 12 13 14
> a*b # scalar * scalar 
[1] 2
> c*d # vector * vector (componentwise!)
[1] 20 30 40
> c+a # vector + scalar
[1] 3 4 5
> c^2 # 
[1]  4  9 16
> exp(c) 
[1]  7.389056 20.085537 54.598150

Quelques opérations de vectorielles!

> c+e # warning but.. no errors, since recycling is assumed to be desired.
[1] 3 5 7 6
Warning message:
In c + e : longer object length is not a multiple of shorter object length

R calcule ce qu'il peut et réutilise ensuite le vecteur plus court pour remplir les blancs ... L'avertissement n'a été donné que parce que les deux vecteurs ont des longueurs qui ne sont pas exactement des multiples. c + f # aucun avertissement que ce soit.

Quelques opérations matricielles Avertissement!

> Z+W # matrix + matrix #(componentwise)
> Z*W # matrix* matrix#(Standard product is always componentwise)

Pour utiliser une matrice, multipliez: V% *% W

> W + a # matrix+ scalar is still componentwise
     [,1] [,2] [,3]
[1,]    2    6   10
[2,]    3    7   11
[3,]    4    8   12
[4,]    5    9   13

> W + c # matrix + vector... : no warnings and R does the operation in a column-wise manner
     [,1] [,2] [,3]
[1,]    3    8   13
[2,]    5   10   12
[3,]    7    9   14
[4,]    6   11   16

Variables "privées"

Un point dans un nom de variable ou de fonction dans R est couramment utilisé pour indiquer que la variable ou la fonction est censée être masquée.

Donc, en déclarant les variables suivantes

> foo <- 'foo'
> .foo <- 'bar'

Et puis, utiliser la fonction ls pour lister les objets ne montrera que le premier objet.

> ls()
[1] "foo"

Cependant, le passage de all.names = TRUE à la fonction affichera la variable "private"

> ls(all.names = TRUE)
[1] ".foo"          "foo"   


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow