25

在 R 中,是否可以在不首先将该向量分配给变量名称的情况下为向量的组件分配名称?正常的方式显然是:

z <- 1:3
names(z) <- c("a", "b", "c") #normal way
names(1:3) <- c("a", "b", "c") #throws an error

第二种方式抛出“名称错误(1:3)<- c(“a”,“b”,“c”):赋值目标扩展为非语言对象”

根据文档,表达式被评估为

 z <- "names<-"(z,
     "[<-"(names(z), 3, "c2"))’.

所以不要惊讶它不起作用,我只是想知道是否有解决方法。

理想情况下,最好有类似的东西:

names(z <- 1:3) <- c("a", "b", "c")
> z
a b c 
1 2 3 

把它放在两条不同的线上似乎是浪费空间。

4

2 回答 2

45

使用setNames()看起来比你建议的理想更干净/更清晰的使用怎么样?

z <- setNames(1:3, c("a", "b", "c"))
# z
# a b c 
# 1 2 3 
于 2012-08-02T19:47:54.550 回答
4

一直认为这更干净一些,也不需要额外的包:

z <- c(a=1, b=2, c=3)
# z
# a b c 
# 1 2 3 
于 2017-07-07T16:04:28.087 回答