Respostas:
Tecnicamente, listas são vetores, embora muito poucos usem esse termo. "lista" é um dos vários modos, com outros sendo "lógico", "caractere", "numérico", "número inteiro". O que você está chamando de vetores são "vetores atômicos" em linguagem estrita R:
aaa <- vector("list", 3)
is.list(aaa) #TRUE
is.vector(aaa) #TRUE
As listas são do tipo "recursivo" (de vetor), enquanto os vetores atômicos não são:
is.recursive(aaa) # TRUE
is.atomic(aaa) # FALSE
Você processa objetos de dados com funções diferentes, dependendo de serem recursivos, atômicos ou possuírem atributos dimensionais (matrizes e matrizes). No entanto, não tenho certeza de que uma discussão sobre as "vantagens e desvantagens" de diferentes estruturas de dados seja uma questão suficientemente focada para o SO. Para acrescentar ao que Tommy disse, além de as listas serem capazes de conter um número arbitrário de outros vetores, existe a disponibilidade de quadros de dados que são um tipo particular de lista que possui um atributo dimensional que define sua estrutura. Ao contrário de matrizes e matrizes que são realmente objetos atômicos dobrados, os quadros de dados podem conter tipos variados, incluindo tipos de fatores.
Há também a ressalva de que a is.vector
função retornará FALSE
quando houver atributos diferentes de nomes. Veja: o que é vetor?
As listas são "recursivas". Isso significa que eles podem conter valores de tipos diferentes, até outras 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
As listas são usadas em R para representar conjuntos de dados: a data.frame
classe é essencialmente uma lista em que cada elemento é uma coluna de um tipo específico.
Outro uso é ao representar um modelo: o resultado de lm
retorna uma lista que contém vários objetos úteis.
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)
Os vetores atômicos (que não são do tipo lista, mas numéricos, lógicos e caracteres) são úteis, pois todos os elementos são conhecidos por terem o mesmo tipo. Isso torna a manipulação muito rápida.
Como alguém que acabou de entrar no R, mas vem de um background C / Java / Ruby / PHP / Python, aqui está como eu penso nisso.
A list
é realmente uma matriz + um hashmap. É uma matriz associativa PHP.
> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'
A vector
é uma matriz / lista de tipo fixo. Pense nisso como uma lista vinculada - porque colocar itens diferentes em uma lista vinculada é um antipadrão de qualquer maneira. É um vetor no mesmo sentido que as unidades SIMD / MMX / vetor usam a palavra.
Esta e outras perguntas introdutórias semelhantes são respondidas em http://www.burns-stat.com/pages/Tutor/hints_R_begin.html
Ele deve ser uma introdução suave que coloca você em funcionamento com o R o mais rápido possível. Até certo ponto, consegue.
--- Editar: -
Uma tentativa de explicar mais; citada da referência acima.
Vetor atômico
Existem três variedades de vetores atômicos que você provavelmente encontrará:
- "numérico"
- "lógico"
- "personagem"
O que deve ser lembrado sobre os vetores atômicos é que todos os elementos neles são de apenas um tipo.
Lista
As listas podem ter diferentes tipos de itens em diferentes componentes. Um componente de uma lista pode ser outra lista, um vetor atômico (e outras coisas).
Por favor, consulte também este link.
lista incluem vários tipos de dados como caractere, numérico, lógico et. mas o vetor contém apenas tipos de dados semelhantes. por exemplo:
scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)
para 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
o que significa lista contendo vários tipos de dados como numérico, caractere e lógico em mylist. Mas no vetor, haverá um único tipo de dado de todos os elementos nesse vetor
por exemplo:
para vetor:
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 em vetores usando onames
método