Vektoren können benannte Elemente haben, was sie manchmal bequemer macht, mit ihnen zu arbeiten.
Es gibt drei Möglichkeiten, einem Vektor Namen hinzuzufügen.
> 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() einen Character-Vektor zuweist> 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
Wenn die Namen nicht mehr erwünscht sind, kannst du sie entfernen, indem du sie auf NULL setzt.
> 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
Die Funktion unname() erreicht dasselbe und macht deine Absicht vielleicht klarer.
Die Funktion names() kann Namen nicht nur setzen, sondern auch abrufen.
> names(months) <- month.abb
> names(months)[1:3]
[1] "Jan" "Feb" "Mar"
Ein Name kann anstelle des Positionsindex verwendet werden, wobei hier Anführungszeichen erforderlich sind.
> months[c("Jul", "Aug")]
Jul Aug
31 31
Damit eine solche Indizierung korrekt funktioniert, solltest du dafür sorgen, dass die Namen eindeutig und nicht fehlend sind. R erzwingt Eindeutigkeit jedoch nicht.
Die üblichen Vektoroperationen funktionieren weiterhin, und die Namen bleiben in der Regel erhalten, wenn das sinnvoll ist.
> months[months == 30]
Apr Jun Sep Nov
30 30 30 30
> sum(months)
[1] 365 # no meaningful names possible
Viele R-Objekte, darunter auch vectors, können beliebige Attribute haben. Das Attribut names ist nur ein Beispiel, wenn auch ein besonders häufiges und wichtiges.
In der Praxis sind Namen für Vektoren manchmal nützlich, aber selten unverzichtbar. Das names-attribute wird für komplexere Strukturen wie lists und dataframes deutlich wichtiger, wie wir in künftigen Konzepten sehen werden.