Réponses:
Techniquement, les listes sont des vecteurs, bien que très peu utilisent ce terme. "liste" est l'un des nombreux modes, les autres étant "logique", "caractère", "numérique", "entier". Ce que vous appelez des vecteurs sont des "vecteurs 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" (de vecteur) alors que les vecteurs atomiques ne le 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 ont des attributs dimensionnels (matrices 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 SO. Pour ajouter à ce que Tommy a dit, en plus des listes capables de contenir un nombre arbitraire d'autres vecteurs, il y a la disponibilité de dataframes qui sont un type particulier de liste qui a un attribut dimensionnel qui définit sa structure. Contrairement aux matrices et aux tableaux qui sont des objets atomiques vraiment pliés, les dataframes peuvent contenir différents types, y compris des types de facteurs.
Il y a aussi la mise en garde que la is.vector
fonction retournera FALSE
lorsqu'il y aura des attributs autres que des noms. Voir: qu'est-ce que le vecteur?
Les listes sont "récursives". Cela signifie qu'ils peuvent contenir des valeurs de différents types, 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 data.frame
classe 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 qui contient 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 (non-listés, 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 personne qui vient d'entrer dans R, mais qui vient d'un fond C / Java / Ruby / PHP / Python, voici comment j'y pense.
A 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'
A vector
est un tableau / une liste de type fixe. Pensez-y comme une liste chaînée - car mettre des éléments différents 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.
Cette question et d'autres questions d'introduction similaires sont répondues dans http://www.burns-stat.com/pages/Tutor/hints_R_begin.html
Il s'agit d'une introduction douce qui vous permet de vous familiariser avec R le plus rapidement possible. Dans une certaine mesure, cela réussit.
--- Éditer: --
Une tentative d'expliquer davantage; cité à partir de la référence ci-dessus.
Vecteur atomique
Il existe trois variétés de vecteur atomique que vous êtes susceptible de rencontrer:
- "Numérique"
- "logique"
- "personnage"
La chose à retenir à propos des vecteurs atomiques est que tous les éléments qu'ils contiennent ne sont que d'un seul type.
liste
Les listes peuvent avoir différents types d'éléments dans différents composants. Un composant d'une liste peut être une autre liste, un vecteur atomique (et d'autres choses).
Veuillez également vous référer à ce lien.
liste comprend plusieurs types de données comme caractère, numérique, logique et. mais le vecteur ne contient que des types de données similaires. par 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 une 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
par 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.
key
s dans des vecteurs en utilisant lanames
méthode.