Recherche…


Introduction

La classe d'un objet de données détermine les fonctions qui traiteront son contenu. L'attribut de class est un vecteur de caractères et les objets peuvent avoir zéro, une ou plusieurs classes. S'il n'y a pas d'attribut de classe, il y aura toujours une classe implicite déterminée par le mode un objet. La classe peut être inspectée avec la class fonctions et peut être définie ou modifiée par la fonction class<- . Le système de classe S3 a été établi au début de l'histoire de S. Le système de classe S4 plus complexe a été établi plus tard

Remarques

Il existe plusieurs fonctions pour inspecter le "type" d'un objet. La fonction la plus utile est la class , bien qu'il soit parfois nécessaire d'examiner le mode d'un objet. Puisque nous discutons des "types", on pourrait penser que typeof serait utile, mais généralement le résultat du mode sera plus utile, car les objets sans attribut "classe" explicite auront une répartition des fonctions déterminée par la "classe implicite" déterminée par leur mode.

Vecteurs

La structure de données la plus simple disponible dans R est un vecteur. Vous pouvez créer des vecteurs de valeurs numériques, de valeurs logiques et de chaînes de caractères à l'aide de la fonction c() . Par exemple:

c(1, 2, 3)
## [1] 1 2 3
c(TRUE, TRUE, FALSE)
## [1]  TRUE  TRUE FALSE
c("a", "b", "c")
## [1] "a" "b" "c"

Vous pouvez également joindre des vecteurs en utilisant la fonction c() .

x <- c(1, 2, 5)
y <- c(3, 4, 6)
z <- c(x, y)
z
## [1] 1 2 5 3 4 6

Un traitement plus élaboré de la création de vecteurs peut être trouvé dans la rubrique "Création de vecteurs"

Inspecter les classes

Chaque objet dans R est assigné à une classe. Vous pouvez utiliser class() pour trouver la classe de l'objet et str() pour voir sa structure, y compris les classes qu'elle contient. Par exemple:

class(iris)
[1] "data.frame"

str(iris)
'data.frame':    150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 ...

class(iris$Species)
[1] "factor"

Nous voyons que iris a la classe data.frame et que str() permet d’examiner les données à l’intérieur. La variable Espèce dans la trame de données de l'iris est de facteur de classe, contrairement aux autres variables de classe numérique. La fonction str() fournit également la longueur des variables et montre les deux premières observations, tandis que la fonction class() ne fournit que la classe de l'objet.

Vecteurs et listes

Les données en R sont stockées dans des vecteurs. Un vecteur typique est une séquence de valeurs ayant toutes le même mode de stockage (par exemple, des vecteurs de caractères, des vecteurs numériques). Voir ?atomic pour plus de détails sur les classes implicites atomiques et leurs modes de stockage correspondants: "logical", "integer", "numeric" (synonym "double"), "complex", "character" et "raw" . Beaucoup de classes sont simplement un vecteur atomique avec un attribut de class en haut:

x <- 1826
class(x) <- "Date"
x 
# [1] "1975-01-01"
 x <- as.Date("1970-01-01")
 class(x)
#[1] "Date"
 is(x,"Date")
#[1] TRUE
 is(x,"integer")
#[1] FALSE
 is(x,"numeric")
#[1] FALSE
  mode(x)
#[1] "numeric"

Les listes sont un type spécial de vecteur où chaque élément peut être n'importe quoi, même une autre liste, d'où le terme R pour les listes: "vecteurs récursifs":

mylist <- list( A = c(5,6,7,8), B = letters[1:10], CC = list( 5, "Z") )

Les listes ont deux utilisations très importantes:

  • Comme les fonctions ne peuvent renvoyer qu'une seule valeur, il est courant de renvoyer des résultats compliqués dans une liste:

    f <- function(x) list(xplus = x + 10, xsq = x^2)
    
    f(7)
    # $xplus
    # [1] 17
    # 
    # $xsq
    # [1] 49
    
  • Les listes constituent également la classe fondamentale sous-jacente aux trames de données . Sous le capot, un bloc de données est une liste de vecteurs ayant tous la même longueur:

    L <- list(x = 1:2, y = c("A","B"))
    DF <- data.frame(L)
    DF
    #   x y
    # 1 1 A
    # 2 2 B
    is.list(DF)
    # [1] TRUE
    

L'autre classe de vecteurs récursifs est les expressions R, qui sont des "langages" - des objets



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