2012-08-02 11 views
17

W R, czy możliwe jest przypisanie nazw do elementów wektora bez wcześniejszego przypisania tego wektora do nazwy zmiennej? Normalnym sposobem jest oczywiście:Przypisywanie nazw do wpisów wektorowych bez przypisywania wektorowi nazwy zmiennej?

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

Drugi sposób wyrzuca "błąd w nazwach (1: 3) < - C (" a”, "b", "c") cel przyporządkowania rozszerza się obiekt non-język”

Według doc, wyrażenie jest oceniane jako

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

Więc nie szok to nie działa, Zastanawiam się, czy istnieje obejść.

Idealnie byłoby miło mieć coś takiego:

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

tylko wydaje się stratą miejsca, aby umieścić to na dwóch różnych liniach.

Odpowiedz

35

Co powiesz na używanie numeru setNames(), który wydaje się być bardziej przejrzysty/czysty niż sugerowany model idealny?

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

tylko sprawdzonych, najwyraźniej określone nazwy jest tylko funkcja wrapper dla „normalny sposób”. Nadal jest oszczędność miejsca, ale nie robi nic nadzwyczajnego. – zzk

+0

@zzk - Tak, też to zauważyłem (i zauważyłem, że jest w pakiecie ** stats **, co dziwne). Najwyraźniej ktoś inny, zmęczony brakiem go w bazie R, napisał go jako małą wygodę. –

2

zawsze, że to było trochę czystsze, również nie potrzebują dodatkowego pakietu:

z <- c(a=1, b=2, c=3) 
# z 
# a b c 
# 1 2 3 
Powiązane problemy