向量可以有具名元素,这有时会让它们用起来更方便。
给向量添加名字有三种方式。
1)创建向量时
> 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
2)把一个字符向量赋给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
3)使用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
如果不再需要名字,可以把它们设为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 属性只是其中一个例子,不过它特别常见,也很重要。
在实际使用中,名字对向量有时很有用,但很少是必需的。对于 lists 和 dataframes 这类更复杂的结构,names-attribute 会重要得多,我们会在后续概念中看到。