Os vetores podem ter elementos com nome, o que por vezes torna mais prático trabalhar com eles.
Há três formas de adicionar nomes a um vetor.
> work_days <- c(Mon = TRUE, Tue = TRUE, Wed = TRUE, Thu = TRUE, Fri = TRUE, Sat = FALSE, Sun = FALSE)
> work_days
Mon Tue Wed Thu Fri Sat Sun
TRUE TRUE TRUE TRUE TRUE FALSE FALSE
names()
> months <- c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
> names(months) <- month.abb
> months
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
31 28 31 30 31 30 31 31 30 31 30 31
setNames()
> months <- c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
> setNames(months, month.name)
January February March April May June July August September October November December
31 28 31 30 31 30 31 31 30 31 30 31
Se já não quiseres os nomes, podes removê-los definindo-os como NULL
> work_days
Mon Tue Wed Thu Fri Sat Sun
TRUE TRUE TRUE TRUE TRUE FALSE FALSE
> names(work_days) <- NULL
> work_days
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE
A função unname() faz o mesmo, e talvez torne a tua intenção mais clara.
A função names() pode tanto obter nomes como defini-los.
> names(months) <- month.abb
> names(months)[1:3]
[1] "Jan" "Feb" "Mar"
Podes usar um nome em vez do índice de posição, mas, neste caso, as aspas são obrigatórias.
> months[c("Jul", "Aug")]
Jul Aug
31 31
Para que este tipo de indexação funcione corretamente, é melhor garantir que os nomes são únicos e que nenhum está em falta. No entanto, o R não impõe que sejam únicos.
As operações habituais sobre vetores continuam a funcionar, e os nomes são geralmente preservados quando isso faz sentido.
> months[months == 30]
Apr Jun Sep Nov
30 30 30 30
> sum(months)
[1] 365 # no meaningful names possible
Muitos objetos do R, incluindo os vectors, podem ter atributos arbitrários associados. O atributo names é apenas um exemplo, ainda que particularmente comum e importante.
Na prática, os nomes são por vezes úteis nos vetores, mas raramente essenciais. O names-attribute torna-se muito mais importante em estruturas mais complexas, como as lists e os dataframes, como veremos em conceitos futuros.