I vettori possono avere elementi con un nome, il che a volte li rende più comodi da usare.
Ci sono tre modi per aggiungere dei nomi a un vettore.
> 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 i nomi non servono più, si possono rimuovere impostandoli a 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
La funzione unname() fa la stessa cosa, e forse rende più chiara l'intenzione.
La funzione names() può sia recuperare i nomi sia impostarli.
> names(months) <- month.abb
> names(months)[1:3]
[1] "Jan" "Feb" "Mar"
Un nome può essere usato al posto dell'indice di posizione, ma in questo caso servono le virgolette.
> months[c("Jul", "Aug")]
Jul Aug
31 31
Perché questo tipo di indicizzazione funzioni correttamente, è meglio assicurarsi che i nomi siano unici e non mancanti. Tuttavia, R non impone l'unicità.
Le solite operazioni sui vettori funzionano comunque, e di norma i nomi vengono conservati se ha senso.
> months[months == 30]
Apr Jun Sep Nov
30 30 30 30
> sum(months)
[1] 365 # no meaningful names possible
Molti oggetti R, inclusi i vectors, possono avere attributi arbitrari. L'attributo names è solo un esempio, anche se particolarmente comune e importante.
In pratica, i nomi a volte sono utili per i vettori ma raramente essenziali. L'attributo names-attribute diventa molto più importante per strutture più complesse come lists e dataframes, come vedremo nei prossimi concetti.