向量可以具有具名元素,這有時讓它們用起來更方便。
有三種方法可以為向量加上名稱。
> 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
> 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
如果不再需要名稱,可以將它們設定為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
unname() 函式可以達到相同效果,而且或許更能清楚表達你的意圖。
names() 函式可以取得名稱,也可以設定名稱。
> names(months) <- month.abb
> names(months)[1:3]
[1] "Jan" "Feb" "Mar"
名稱可以代替位置索引使用,在這種情況下需要加上引號。
> months[c("Jul", "Aug")]
Jul Aug
31 31
為了讓這類索引正確運作,最好確保名稱是唯一且非缺失的。然而,R 並不強制要求唯一性。
一般的向量操作仍然有效,而且如果合理的話,名稱通常會被保留。
> months[months == 30]
Apr Jun Sep Nov
30 30 30 30
> sum(months)
[1] 365 # no meaningful names possible
許多 R 物件,包括vectors,可以附加任意屬性。names屬性只是其中一個例子,不過是特別常見且重要的一個。
實際上,名稱對向量有時很有用,但很少是必要的。
names-attribute對於更複雜的結構,例如lists和dataframes,會變得重要得多,我們將在未來的概念中看到。