Quelles sont les différences entre les types de données vectorielles et de liste dans R?

Quelles sont les principales différences entre les types de données vectorielles et de liste dans R? Quels sont les avantages ou les inconvénients d’utiliser (ou non) ces deux types de données?

J’apprécierais voir des exemples qui illustrent les cas d’utilisation des types de données.

Techniquement, les listes sont des vecteurs, bien que très peu utiliseraient ce terme. “list” est l’un des modes, d’autres étant “logical”, “character”, “numeric”, “integer”. Ce que vous appelez vecteurs sont “atomiques” en langage ssortingct:

aaa <- vector("list", 3) is.list(aaa) #TRUE is.vector(aaa) #TRUE 

Les listes sont un type "récursif" alors que les vecteurs atomiques ne sont pas:

 is.recursive(aaa) # TRUE is.atomic(aaa) # FALSE 

Vous traitez des objects de données avec des fonctions différentes selon qu'ils sont récursifs, atomiques ou ont des atsortingbuts dimensionnels (masortingces et tableaux). Cependant, je ne suis pas sûr qu'une discussion sur les "avantages et inconvénients" des différentes structures de données soit une question suffisamment ciblée pour les SO. Pour append à ce que Tommy a dit, en plus des listes pouvant contenir un nombre arbitraire d'autres vecteurs, il existe des trames de données qui constituent un type particulier de liste qui possède un atsortingbut dimensionnel définissant sa structure. Contrairement aux masortingces et aux tableaux qui sont des objects atomiques réellement pliés, les frameworks de données peuvent contenir différents types, y compris des types de facteurs.

Les listes sont “récursives”. Cela signifie qu’ils peuvent contenir des valeurs de différents types, même d’autres listes:

 x <- list(values=sin(1:3), ids=letters[1:3], sub=list(foo=42,bar=13)) x # print the list x$values # Get one element x[["ids"]] # Another way to get an element x$sub$foo # Get sub elements x[[c(3,2)]] # Another way (gets 13) str(x) # A "summary" of the list's content 

Les listes sont utilisées dans R pour représenter les ensembles de données: la classe data.frame est essentiellement une liste où chaque élément est une colonne d'un type spécifique.

Une autre utilisation est la représentation d'un modèle: le résultat de lm renvoie une liste contenant un tas d'objects utiles.

 d <- data.frame(a=11:13, b=21:23) is.list(d) # TRUE str(d) m <- lm(a ~ b, data=d) is.list(m) # TRUE str(m) 

Les vecteurs atomiques (non similaires à des listes, mais numériques, logiques et caractères) sont utiles car tous les éléments sont connus pour avoir le même type. Cela rend leur manipulation très rapide.

En tant que quelqu’un qui vient d’entrer dans R, mais vient d’un arrière-plan C / Java / Ruby / PHP / Python, voici comment je le pense.

Une list est vraiment un tableau + un hashmap. C’est un tableau associatif PHP.

 > foo = list(bar='baz') > foo[1] 'baz' > foo$bar 'baz' > foo[['bar']] 'baz' 

Un vector est un tableau / liste de type fixe. Pensez-y comme une liste liée – car mettre des éléments différents dans une liste liée est de toute façon un anti-pattern. C’est un vecteur dans le même sens que les unités SIMD / MMX / vector utilisent le mot.

Vous trouverez des réponses à ces questions d’introduction et autres sur http://www.burns-stat.com/pages/Tutor/hints_R_begin.html

Il est destiné à être une introduction en douceur qui vous permet de démarrer avec R aussi rapidement que possible. Dans une certaine mesure, il réussit.

Vecteurs (tableau à une dimension) : peut contenir des valeurs numériques, de caractères ou logiques. Les éléments d’un vecteur ont tous le même type de données.

Une liste en R est similaire à votre liste de choses à faire au travail ou à l’école: les différents éléments de cette liste diffèrent probablement en longueur, en caractéristiques, en type d’activité à faire, …

Une liste dans R vous permet de rassembler divers objects sous un même nom (c’est-à-dire le nom de la liste) de manière ordonnée. Ces objects peuvent être des masortingces, des vecteurs, des trames de données, voire d’autres listes, etc. Il n’est même pas nécessaire que ces objects soient liés les uns aux autres.

Vous pourriez dire qu’une liste est une sorte de super type de données: vous pouvez y stocker pratiquement n’importe quelle information!

Pour construire une liste, vous utilisez la liste de fonctions (): my_list <- list (comp1, comp2 ...)

Les arguments de la fonction liste sont les composants de la liste. Rappelez-vous que ces composants peuvent être des masortingces, des vecteurs, d’autres listes, …

Pour résumer, la principale différence entre liste et vecteur est que la liste dans R vous permet de regrouper divers objects sous un même nom (c’est-à-dire le nom de la liste) de manière ordonnée. Ces objects peuvent être des masortingces, des vecteurs, des trames de données, même d’autres listes, etc. Il n’est même pas nécessaire que ces objects soient liés entre eux de quelque manière que ce soit.

list inclut plusieurs types de données comme caractère, numérique, logique et. mais le vecteur ne contient que des types de données similaires.

pour ex:

 scores <- c(20,30,40,50) student <- c("A","B","C","D") sc_log <- c(TRUE,FALSE,FALSE,TRUE) 

pour la liste:

 mylist <- list(scores,student,sc_log) # search for class of mylist vector #check structure of mylist using str() function. str(mylist) [1] list of 3 [1] $:num [1:4] 20 30 40 50 [2] $:chr [1:4] "A""B""C""D" [3] $:log [1:4] TRUE FALSE FALSE TRUE 

ce qui signifie liste contenant plusieurs types de données comme numérique, caractère et logique dans mylist.Mais dans le vecteur il y aura un seul type de données de tous les éléments de ce vecteur

pour ex:

pour le vecteur:

 vector1 <- c(1,2,3,4) Class(vector1) [1] "Numeric" #which means all elements of vector containing single data type that is numeric only.