Listas (lists)
Listas (lists) são uma generalização dos vetores que podem conter elementos de classes diferentes.
> lista1 <- list(234, "casa", 1+2i, TRUE) > lista1 [[1]] [1] 234 [[2]] [1] "casa" [[3]] [1] 1+2i [[4]] [1] TRUE > lista1[2] [[1]] [1] "casa" > lista1[3] <- "novo valor" > lista2 <- vector("list", length=4) > lista2[1] <- 1 > lista2[2] <- "popula" > lista2[3] <- "a lista" > lista2[4] <- True > lista2 [[1]] [1] 1 [[2]] [1] "popula" [[3]] [1] "a lista" [[4]] [1] TRUE > # A função list concatena os argumentos, que podem ser vetores > v1 <- c(1,3,5) > v2 <- c("1", "3", "5") > v3 <- c(T, F) > lista3 <- list(v1, v2, v3) > lista3 [[1]] [1] 1 3 5 [[2]] [1] "1" "3" "5" [[3]] [1] TRUE FALSE > # Várias listas podem ser concatenadas > listona <- list(lista1, lista2, lista3) > # O segundo elemento da terceira lista é > listona[[3]][[2]] [1] "1" "3" "5" > # Uma lista pode ter seus objetos nomeados > lista4 <- list(impares=c(1,3,5,7,9), pares=c(2,4,6,8)) > lista4 $impares [1] 1 3 5 7 9 $pares [1] 2 4 6 8 > # Cada objeto pode ser recuperado por seu nome de duas formas > lista4$pares # retorna 2 4 6 8 > lista4["pares"] # retorna 2 4 6 8 > # Nos dois casos chamamos o segundo objeto da lista > lista4[2] # $pares [1] 2 4 6 8 > # A lista pode ser criada com o atributo title (título) > # juntamente com os nomes dos objetos anexados > alunos <- list(title="Alunos", nome=c("Pedro", "Maria", "Jonas", "Raquel"), idade=c(17, 19, 14, 20)) > alunos $title [1] "Alunos" $nome [1] "Pedro" "Maria" "Jonas" "Raquel" $idade [1] 17 19 14 20 > A lista tem os atributos > names(alunos) [1] "title" "nome" "idade" > # Um atributo pode ser alterado dinamicamente > alunos["title"]<-"Alunos - 2018" > names(alunos)[2]<-"Apelidos" > # A lista fica da seguinte forma: > alunos $title [1] "Alunos - 2018" $apelidos [1] "Pedro" "Maria" "Jonas" "Raquel" $idade [1] 17 19 14 2
Listas são importantes para a organização de dados inicialmente coletados de forma confusa ou desorganizada. Além disso muitas funções em R retornam listas que devem ser manipuladas para uma completa análise destes resultados.
Resumimos os comandos usados:
Função | Efeito |
---|---|
lista <- list(obj1, … ,objn) | cria uma lista com objetos de tipos diversos |
lista <- vector("list", length=n) | cria uma lista vazia de comprimento n |
lista <- list(nome1=vetor1,…, nomen=vetorn) | cria uma lista com atributos nome para cada vetor |
lista[nome1] | recupera o vetor1 |
list(title=”titulo”, obj1, … ,objn) | cria uma lista com atributo title = “titulo” |
names(lista) | exibe os atributos da lista |
Fatores (factors)
Fatores (factors) são variáveis em R que assumem um número finito e discreto de valores. Elas são também chamadas de categorias ou tipos enumerados e são muito usadas na modelagem estatística. Fatores são armazenados como um vetor de inteiros associado a outro vetor de caracteres, usados na exibição dos fatores. Um fator é criado com a função factor
que recebe como argumento um vetor numérico ou de caracteres. No entanto os níveis de um fator sempre serão strings (caracteres ou literais).
Os níveis possíveis de um fator podem ser exibidos através do comando levels
. Fatores são exibidos em ordem alfabética por default. Para alterar esta ordem de exibição o argumento levels
pode receber um vetor com os valores possíveis na ordem desejada. A função table
recebe um fator como argumento e retorna uma tabela com uma contagem de cada ítem do fator.
> x <- factor(c("sim", "não", "não", "não","sim", "sim")) > x [1] sim não não não sim sim Levels: não sim > table(x) x não sim 3 3 > # A ordem de exibição pode ser alterada após a criação do fator > y <- c("fraco", "normal", "forte", "forte", "forte", "normal") > cafe <- factor(y) > cafe <- factor(cafe, levels=c("fraco","normal","forte")) > table(cafe) cafe fraco normal forte 1 2 3 > # Os níves podem ser exibidos separadamente > levels(cafe) [1] "fraco" "normal" "forte" > # Um nível pode ser colocado em primeiro lugar > relevel(cafe, "forte") [1] fraco normal forte forte forte normal Levels: forte fraco normal
Pode ocorrer que um conjunto de dados contenha uma tabela de informações codificadas numericamente. Suponha, por exemplo, que o resultado de um questionário tenha armazenado os códigos 1 = "masculino"
e 2 = "feminino"
. Neste caso podemos fazer com que variáveis numéricas sejam armazenadas como factors
usando as opções levels
e labels
.
> sexo <- c(1, 1, 1, 2, 1, 2, 2, 2, 1) > table(sexo) sexo 1 2 5 4 > sexo <- factor(sexo, levels = c(1,2), labels=c("masculino","feminino")) > table(sexo) sexo masculino feminino 5 4 > # Note que a ordem dos labels deve corresponder à ordem dos levels. > # Para alterar os dados (ou inserir novos) os labels devem ser usados > sexo[3] <- "feminino" > sexo[10] <- "masculino" > sexo[11] <- "deconhecido" # um erro é gerado e o valor NA inserido
Apesar da ordem de exibição imposta aos fatores acima, todos eles são todos não ordenados. Fatores ordenados devem ser usados se comparações entre eles for necessária. Para isso usamos o argumento opcional ordered = TRUE
.
medidas <-c("grande","gigante", "grande","gigante", "gigante","médio","grande","gigante", "pequeno","pequeno","grande","gigante") > medidas [1] "grande" "gigante" "grande" "gigante" "gigante" "médio" "grande" "gigante" "pequeno" [10] "pequeno" "grande" "gigante" > niveis <-c("pequeno","médio","grande","gigante") > tamanho <- factor(medidas, levels=niveis,ordered = TRUE) > tamanho [1] grande gigante grande gigante gigante médio grande [8] gigante pequeno pequeno grande gigante Levels: pequeno < médio < grande < gigante > table(tamanho) tamanho pequeno médio grande gigante 2 1 4 5 > # A ordem de um fator pode ser invertida > tamanho2 <- factor(tamanho, levels=rev(levels(tamanho))) > levels(tamanho2) [1] "gigante" "grande" "médio" "pequeno" > table(tamanho2) tamanho2 gigante grande médio pequeno 5 4 1 2
Função | Efeito |
---|---|
fator <- factor(vetor) | cria uma lista de fatores |
table(fator) | exibe os fatores em forma de tabela |
fator <- (fator, levels=vetor) | ordena a ordem de exibição dos fatores |
levels(fator) | exibe a ordem de exibição dos fatores |
fator <- factor(fator, levels=vetor1, labels=vetor2) | substitui os níveis em vetor1 com texto em vetor2 |
fator <- factor(fator, levels=vetor1, ordered = TRUE) | cria fatores ordenados de acordo com vetor1 |
tamanho
usada acima. Variáveis contínuas podem assumir qualquer valor, em geral dentro de limites estabelecidos.