Respuestas:
Técnicamente, las listas son vectores, aunque muy pocos usarían ese término. "lista" es uno de varios modos, y otros son "lógico", "carácter", "numérico", "entero". Lo que llama vectores son "vectores atómicos" en estricto lenguaje R:
aaa <- vector("list", 3)
is.list(aaa) #TRUE
is.vector(aaa) #TRUE
Las listas son del tipo "recursivo" (de vector) mientras que los vectores atómicos no son:
is.recursive(aaa) # TRUE
is.atomic(aaa) # FALSE
Usted procesa objetos de datos con diferentes funciones dependiendo de si son recursivos, atómicos o tienen atributos dimensionales (matrices y matrices). Sin embargo, no estoy seguro de que una discusión sobre las "ventajas y desventajas" de las diferentes estructuras de datos sea una pregunta suficientemente enfocada para SO. Para agregar a lo que dijo Tommy, además de que las listas pueden contener un número arbitrario de otros vectores, existe la disponibilidad de marcos de datos que son un tipo particular de lista que tiene un atributo dimensional que define su estructura. A diferencia de las matrices y las matrices que en realidad son objetos atómicos plegados, los marcos de datos pueden contener diferentes tipos, incluidos los tipos de factores.
También existe la advertencia de que la is.vector
función volverá FALSE
cuando haya atributos distintos de los nombres. Ver: ¿qué es el vector?
Las listas son "recursivas". Esto significa que pueden contener valores de diferentes tipos, incluso otras listas:
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
Las listas se usan en R para representar conjuntos de datos: la data.frame
clase es esencialmente una lista donde cada elemento es una columna de un tipo específico.
Otro uso es cuando se representa un modelo: el resultado de lm
devuelve una lista que contiene un montón de objetos útiles.
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)
Los vectores atómicos (no similares a listas, pero numéricos, lógicos y de caracteres) son útiles ya que se sabe que todos los elementos tienen el mismo tipo. Esto hace que manipularlos sea muy rápido.
Como alguien que acaba de ingresar a R, pero proviene de un fondo C / Java / Ruby / PHP / Python, así es como lo pienso.
A list
es realmente una matriz + un hashmap. Es una matriz asociativa de PHP.
> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'
A vector
es una matriz / lista de tipo fijo. Piense en ello como una lista vinculada, porque de todos modos, poner elementos diferentes en una lista vinculada es un antipatrón. Es un vector en el mismo sentido que las unidades SIMD / MMX / vector usan la palabra.
Esta y otras preguntas introductorias similares se responden en http://www.burns-stat.com/pages/Tutor/hints_R_begin.html
Está destinado a ser una introducción suave que lo pone en funcionamiento con R lo más rápido posible. Hasta cierto punto tiene éxito.
--- Editar: -
Un intento de explicar más; citado de la referencia anterior.
Vector atómico
Hay tres variedades de vectores atómicos que es probable que encuentre:
- "numérico"
- "lógico"
- "personaje"
Lo que hay que recordar sobre los vectores atómicos es que todos los elementos en ellos son de un solo tipo.
Lista
Las listas pueden tener diferentes tipos de elementos en diferentes componentes. Un componente de una lista puede ser otra lista, un vector atómico (y otras cosas).
Consulte también este enlace.
La lista incluye múltiples tipos de datos como caracteres, numéricos, lógicos, etc. pero el vector solo contiene un tipo similar de datos. por ejemplo:
scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)
para la lista:
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
lo que significa una lista que contiene múltiples tipos de datos como numérico, de caracteres y lógico en mylist. Pero en el vector habrá un solo tipo de datos de todos los elementos en ese vector
por ejemplo:
para el vector:
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 en vectores usando elnames
método