Listas

Linguagem R

As listas são formadas por coleções ordenadas de objetos. Os objetos da lista são os seus componentes, que podem ser de tipos diferentes, como vetores, funções ou mesmo outras listas. Os componentes não são obrigados a ter as mesmas dimensões.

nome <- list(nome1=objeto1, nome2=objeto2, nome3=objeto3, …)

Se os nomes dos objetos da lista forem omitidos, só poderão ser acessados por seus números. Os objetos da lista são copiados, não são incorporados, quando a lista é criada, portanto, são objetos independentes e a alteração em um não afeta o outro.

No exemplo abaixo é criada uma lista de cores para as páginas HTML, contendo o nome, o código hexadecimal e RGB das cores. Note que para a cor púrpura não está presente o código RGB.

> # Cores: nome, hexadecimal e RGB
> nome <- c("vermelho", "verde", "azul", "índigo", "púrpura")
> hexa <- c("#FF0000", "#00FF00", "#0000FF", "#4B0082", "#800080")
> verm_rgb <- list(c(255,0,0))
> verd_rgb <- list(c(0,255,0))
> azul_rgb <- list(c(0,0,255))
> indi_rgb <- list(c(75,0,130))
> rgb <- list(verm_rgb, verd_rgb, azul_rgb, indi_rgb)
> cores <- list(nome = nome, hexa = hexa, rgb = rgb)
> # Mostrar toda a lista de cores
> print(cores)
$nome
[1] "vermelho" "verde"    "azul"     "índigo"   "púrpura" 

$hexa
[1] "#FF0000" "#00FF00" "#0000FF" "#4B0082" "#800080"

$rgb
$rgb[[1]]
$rgb[[1]][[1]]
[1] 255   0   0

$rgb[[2]]
$rgb[[2]][[1]]
[1]   0 255   0

$rgb[[3]]
$rgb[[3]][[1]]
[1]   0   0 255

$rgb[[4]]
$rgb[[4]][[1]]
[1]  75   0 130

Abaixo estão mostrados alguns exemplos de extração dos valores da lista:

> # Mostrar os valores hexadecimais das cores
> cores[[2]]
[1] "#FF0000" "#00FF00" "#0000FF" "#4B0082" "#800080"
> # ou
> cores[["hexa"]]
[1] "#FF0000" "#00FF00" "#0000FF" "#4B0082" "#800080"
> # ou
> cores$hexa
[1] "#FF0000" "#00FF00" "#0000FF" "#4B0082" "#800080"
> # Mostrar os valores RGB das cores
> cores[["rgb"]]
[[1]]
[[1]][[1]]
[1] 255   0   0

[[2]]
[[2]][[1]]
[1]   0 255   0

[[3]]
[[3]][[1]]
[1]   0   0 255

[[4]]
[[4]][[1]]
[1]  75   0 130

> # ou
> cores["rgb"]
$rgb
$rgb[[1]]
$rgb[[1]][[1]]
[1] 255   0   0

$rgb[[2]]
$rgb[[2]][[1]]
[1]   0 255   0

$rgb[[3]]
$rgb[[3]][[1]]
[1]   0   0 255

$rgb[[4]]
$rgb[[4]][[1]]
[1]  75   0 130

> # ou
> cores$rgb
[[1]]
[[1]][[1]]
[1] 255   0   0

[[2]]
[[2]][[1]]
[1]   0 255   0

[[3]]
[[3]][[1]]
[1]   0   0 255

[[4]]
[[4]][[1]]
[1]  75   0 130

> # Para extrair o primeiro e o segundo componentes
> cores[c(1,2)]
$nome
[1] "vermelho" "verde"    "azul"     "índigo"   "púrpura" 

$hexa
[1] "#FF0000" "#00FF00" "#0000FF" "#4B0082" "#800080"

> # Para extrair a segunda cor
> cores[[c(1,2)]]
[1] "verde"
> # ou
> cores$nome[[2]]
[1] "verde"
> # Para extrair todos os componentes, menos o segundo
> cores[-2]
$nome
[1] "vermelho" "verde"    "azul"     "índigo"   "púrpura" 

$rgb
$rgb[[1]]
$rgb[[1]][[1]]
[1] 255   0   0

$rgb[[2]]
$rgb[[2]][[1]]
[1]   0 255   0

$rgb[[3]]
$rgb[[3]][[1]]
[1]   0   0 255

$rgb[[4]]
$rgb[[4]][[1]]
[1]  75   0 130

> # Para extrair o código RGB da segunda cor
> cores$rgb[[2]][[1]]
[1]   0 255   0

Este exemplo mostra que modificar o vetor mulheres não altera a lista pessoas:

> mulheres <- c("Ana", "Maria", "Cristina")
> homens <- c("João", "José", "Manuel")
> pessoas <- list(mulheres = mulheres, homens = homens)
> print(pessoas)
$mulheres
[1] "Ana"      "Maria"    "Cristina"

$homens
[1] "João"   "José"   "Manuel"

> mulheres <- append(mulheres, "Joana", 2)
> print(mulheres)
[1] "Ana"      "Maria"    "Joana"    "Cristina"
> print(pessoas)
$mulheres
[1] "Ana"      "Maria"    "Cristina"

$homens
[1] "João"   "José"   "Manuel"