为向量条目分配名称而不为向量分配变量名称?

Posted

技术标签:

【中文标题】为向量条目分配名称而不为向量分配变量名称?【英文标题】:Assign names to vector entries without assigning the vector a variable name? 【发布时间】:2012-07-31 20:22:54 【问题描述】:

在 R 中,是否可以在不首先将该向量分配给变量名称的情况下为向量的组件分配名称? 正常的方式显然是:

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

第二种方式抛出“名称错误(1:3)

根据文档,表达式被评估为

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

所以不用担心它不起作用,我只是想知道是否有解决方法。

理想情况下,最好有类似的东西:

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

把它放在两条不同的行似乎是浪费空间。

【问题讨论】:

【参考方案1】:

使用setNames() 怎么样,这似乎比您建议的理想更干净/更清晰?

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

【讨论】:

刚刚检查过,显然设置名称只是“正常方式”的函数包装器。仍然可以节省空间,但它没有做任何花哨的事情。 @zzk -- 是的,我也看到了(而且还注意到它在 stats 包中,很奇怪)。显然其他人厌倦了在 base R 中没有它,并将其写成一个小便利功能。【参考方案2】:

一直觉得这个比较干净,也不需要额外的包:

z <- c(a=1, b=2, c=3)
# z
# a b c 
# 1 2 3 

【讨论】:

以上是关于为向量条目分配名称而不为向量分配变量名称?的主要内容,如果未能解决你的问题,请参考以下文章

R语言 变量

将变量名称的向量传递给 dplyr 中的arrange()

根据向量new_varname,old_varname重命名dplyr中的变量名[重复]

在 Java 中使用动态名称分配变量

在 Java 中使用动态名称分配变量

将已知长度的 char 指针转换为 char 向量而不分配新内存