Listas e Fatores

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
Observação: Variáveis podem ser nominais, ordinais ou contínuas. As nominais são categorias sem nenhuma ordenação. Um exemplo seriam modelos de automóveis, em uma tabela. Variáveis ordinais são formadas por texto mas com uma ordem definida. Um exemplo é a variável tamanho usada acima. Variáveis contínuas podem assumir qualquer valor, em geral dentro de limites estabelecidos.


Data Frames