我发现自己经常写下以下两行.有简洁的替代方案吗?
newObj <- vals
names(newObj) <- nams
# This works, but is ugly and not necessarily preferred
'names<-'(newObj <- vals, nams)
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似的东西(当然这不起作用):
newObj <- c(nams = vals)
Run Code Online (Sandbox Code Playgroud)
将它包装在一个函数中也是一个选项,但我想知道功能是否已经存在.
样本数据
vals <- c(1, 2, 3)
nams <- c("A", "B", "C")
Run Code Online (Sandbox Code Playgroud)
Das*_*son 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
Run Code Online (Sandbox Code Playgroud)
该names<-方法通常(如果不总是)在内部复制对象.setNames只是一个包装names<-,
如果你想在代码和内存中简洁地分配名称和值,那么setattr来自bit或data.table包的函数将通过引用(不复制)执行此操作
例如
library(data.table) # or library(bit)
setattr(vals, 'names', names)
Run Code Online (Sandbox Code Playgroud)
也许稍微简洁一点,但你可以自己写一个简单的包装
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
Run Code Online (Sandbox Code Playgroud)
请注意,如果您指定一个新对象,旧对象和新对象都将具有名称!