Quais são as principais diferenças entre os tipos de dados vetoriais e de lista no R? Quais são as vantagens ou desvantagens de usar (ou não) esses dois tipos de dados?
Eu gostaria de ver exemplos que demonstrem os casos de uso dos tipos de dados.
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.
key
s em vetores usando onames
métodoEsta 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.
Por favor, consulte também este link.
fonte
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:
para lista:
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:
fonte