简洁地同时分配名称和值

时间:2013-02-02 22:14:36

标签: r assign

我发现自己经常写下以下两行。有简洁的替代方案吗?

      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") 

2 个答案:

答案 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<-的包装器,

如果您想在代码和内存中简洁地指定名称和值,那么来自setattrbit包的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 

请注意,如果您指定一个新对象,旧对象和新对象都将具有名称!