名称

名称属性 属于 R

1 个练习

关于 名称属性

向量可以有具名元素,这有时会让它们用起来更方便。

创建

给向量添加名字有三种方式。

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 会重要得多,我们会在后续概念中看到。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 名称属性