web-dev-qa-db-fra.com

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

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

J'aimerais voir des exemples illustrant les cas d'utilisation des types de données.

97
DCR

Techniquement, les listes sont vecteurs, bien que très peu d’utilisateurs utilisent ce terme. "liste" est l'un des modes, les autres étant "logique", "caractère", "numérique", "entier". Ce que vous appelez des vecteurs sont "atomiques" dans le langage strict de R:

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

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

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

Vous traitez des objets de données avec des fonctions différentes selon qu’ils sont récursifs, atomiques ou dotés d’attributs dimensionnels (matrices et tableaux). Cependant, je ne suis pas sûr qu'une discussion sur les "avantages et inconvénients" de différentes structures de données soit une question suffisamment ciblée pour SO. Pour ajouter à ce que Tommy a dit, en plus des listes pouvant contenir un nombre arbitraire d'autres vecteurs, il existe la disponibilité de trames de données qui constituent un type particulier de liste ayant un attribut dimensionnel qui définit sa structure. Contrairement aux matrices et aux tableaux qui sont en réalité des objets atomiques repliés, les cadres de données peuvent contenir divers types, notamment des types de facteurs.

61
42-

Les listes sont "récursives". Cela signifie qu'ils peuvent contenir des valeurs de types différents, voire 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 des 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 lors de la représentation d'un modèle: le résultat de lm renvoie une liste contenant un tas d'objets 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 (autres que les 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.

40
Tommy

En tant que personne qui vient d'entrer dans R, mais qui vient d'un contexte C/Java/Ruby/PHP/Python, voici comment j'y pense.

Un list est en réalité un tableau + un hashmap. C'est un tableau associatif PHP.

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

vector est un tableau/liste de type fixe. Pensez-y comme à une liste chaînée - parce que placer des éléments dissemblables dans une liste chaînée est de toute façon un anti-modèle. C'est un vecteur dans le même sens que les unités SIMD/MMX/vectorielles utilisent le mot.

15
Visser

Cette question, ainsi que d’autres questions similaires, reçoivent une réponse dans http://www.burns-stat.com/pages/Tutor/hints_R_begin.html

Il s’agit d’une introduction douce qui vous permet de commencer à utiliser R le plus rapidement possible. Dans une certaine mesure, cela réussit.

7
Patrick Burns

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

Une liste dans R est similaire à votre liste de tâches au travail ou à l'école: les différents éléments de cette liste diffèrent très probablement de la longueur, des caractéristiques, du type d'activité à réaliser, ...

Un liste dans R vous permet de regrouper une variété d'objets sous un même nom (c'est-à-dire, le nom de la liste) de manière ordonnée. Ces objets peuvent être des matrices, des vecteurs, des trames de données, voire d'autres listes, etc. Il n'est même pas nécessaire que ces objets soient liés les uns aux autres.

On pourrait dire qu’une liste est un type de super données: vous pouvez y stocker pratiquement n’importe quelle information!

Pour construire une liste, utilisez la fonction list (): my_list <- list (comp1, comp2 ...)}

Les arguments de la fonction de liste sont les composants de la liste. N'oubliez pas que ces composants peuvent être des matrices, des vecteurs, d'autres listes, ...

Pour résumer, la différence principale entre liste et vecteur est que liste dans R vous permet de regrouper divers objets sous un même nom (c'est-à-dire, le nom de la liste) dans un manière ordonnée. Ces objets peuvent être des matrices, des vecteurs, des trames de données, voire d'autres listes, etc. Il n'est même pas nécessaire que ces objets soient liés les uns aux autres de quelque manière que ce soit ... alors que les éléments d'un vecteur ont tous le même type de données.

2
Naren

la liste inclut plusieurs types de données tels que caractère, numérique, logique et. mais le vecteur ne contient qu'un type de données similaire ., par exemple:

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

pour 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 une liste contenant plusieurs types de données tels que 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.
0
Devyani Balyan