2012-08-02 130 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