2012-08-02 107 views
17

在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 

似乎只是浪费空间放的是两个不同的线路。

回答

35

如何使用setNames(),它看起来比您所建议的理想更清晰/更清晰?

z <- setNames(1:3, c("a", "b", "c")) 
# z 
# a b c 
# 1 2 3 
+1

只是检查,明显地设置了名称仅仅是“正常方式”的功能包装。仍然是一个节省空间,但它没有做任何幻想。 – zzk 2012-08-02 20:10:46

+0

@zzk - 是的,我也看到了(也注意到它在** stats **包中,很奇怪)。很明显,有人厌倦了在基本R中没有它,并且把它写成一个小小的便利功能。 – 2012-08-02 20:18:42

2

一直以为这只是干净了一点,也不需要额外的包:

z <- c(a=1, b=2, c=3) 
# z 
# a b c 
# 1 2 3