Assign names to vector entries without assigning the vector a variable name?
28,699
Solution 1
How about using setNames()
, which seems even cleaner/clearer than your suggested ideal?
z <- setNames(1:3, c("a", "b", "c"))
# z
# a b c
# 1 2 3
Solution 2
Always thought this was a little cleaner, also don't need an additional package:
z <- c(a=1, b=2, c=3)
# z
# a b c
# 1 2 3
Related videos on Youtube
Author by
zzk
Updated on July 08, 2020Comments
-
zzk almost 4 years
In R, is it possible to assign names to components of a vector without first assigning that vector to a variable name? The normal way is obviously:
z <- 1:3 names(z) <- c("a", "b", "c") #normal way names(1:3) <- c("a", "b", "c") #throws an error
The second way throws "Error in names(1:3) <- c("a", "b", "c") : target of assignment expands to non-language object"
According to the doc, the expression is evaluated as
z <- "names<-"(z, "[<-"(names(z), 3, "c2"))’.
So no shock it doesn't work, I'm just wondering if there's a work around.
Ideally, it'd be nice to have something like:
names(z <- 1:3) <- c("a", "b", "c") > z a b c 1 2 3
Just seems like a waste of space to put that on two different lines.
-
zzk almost 12 yearsjust checked, apparently set names is just a function wrapper for the 'normal way'. Still a space saver, but its not doing anything fancy.
-
Josh O'Brien almost 12 years@zzk -- Yeah, I saw that too (and also noticed that it's in the stats package, oddly enough). Clearly someone else tired of not having it available in base R, and wrote it up as a little convenience function.