我发现自己经常写下以下两行。有简洁的替代方案吗?
newObj <- vals
names(newObj) <- nams
# This works, but is ugly and not necessarily preferred
'names<-'(newObj <- vals, nams)
我正在寻找类似的东西(当然不起作用):
newObj <- c(nams = vals)
在函数中包装它也是一个选项,但我想知道功能是否已经存在。
示例数据
vals <- c(1, 2, 3)
nams <- c("A", "B", "C")
答案 0 :(得分:14)
您需要setNames
功能
# Your example data
vals <- 1:3
names <- LETTERS[1:3]
# Using setNames
newObj <- setNames(vals, names)
newObj
#A B C
#1 2 3
答案 1 :(得分:5)
names<-
方法通常(如果不是总是)在内部复制对象。 setNames
只是names<-
的包装器,
如果您想在代码和内存中简洁地指定名称和值,那么来自setattr
或bit
包的data.table
函数将通过引用(不复制)执行此操作
例如
library(data.table) # or library(bit)
setattr(vals, 'names', names)
也许略显简洁,但你可以自己写一个简单的包装
name <- function(x, names){ setattr(x,'names', names)}
val <- 1:3
names <- LETTERS[1:3]
name(val, names)
# and it has worked!
val
## A B C
## 1 2 3
请注意,如果您指定一个新对象,旧对象和新对象都将具有名称!