给列表变量命名

时间:2015-12-07 09:27:51

标签: r

所以我们知道R有list()变量,并且知道R有函数调用names()来给变量命名。例如:

a=30
names(a)="number"
a
# number
# 30

但是现在,我想给列表变量一个名称,如下所示:

b=list()
names(b)="number"

并返回如下错误消息:

Error in names(b) = "number" : 
'names' attribute [1] must be the same length as the vector [0]

我想要做什么?我这样做是因为我需要很多列表变量。或者,你有另一种方式,所以我可以制作许多列表变量而不用它的名字吗?

3 个答案:

答案 0 :(得分:17)

由于@akrun不再需要任何积分,下面是一个示例,说明如何为列表指定名称:

lst <- list(a="one", b="two", c=c(1:3))
names(lst)
[1] "a" "b" "c"
names(lst) <- c("x", "y", "z")

> lst
$x
[1] "one"

$y
[1] "two"

$z
[1] 1 2 3

答案 1 :(得分:3)

似乎您有兴趣标记对象本身而不是其中的元素。关键是列表对象的names属性必须分配给它的元素。一个选项,因为你说你有很多列表对象,是将列表存储在一个大列表中,然后你可以为大列表分配名称,列表对象中的元素也可以命名。

allLists <- list('number' = list())

> allLists
$number
list()

另一种选择是,您可以使用label包中的Hmisc功能。它修改R中的大多数常见对象,使其具有一个子类&#34;标记为&#34;因此,无论何时打印列表,它都会显示标签。这对于文档和组织工作区来说更好一点,但要注意的是,很容易将标记的对象意外地投射到非标记的类并且混淆不认为搜索多个方法的方法类。

library(Hmisc)
p <- list()
label(p) <- 'number'

> p
number
list()

另一个选择是制作&#34; name&#34;列表对象的列表的实际元素。您将在许多复杂的R数据结构中看到,这是在需要时存储标签,标题或名称并且基本R数据结构无法满足的首选方式。

b <- list('name' = 'number')

最后一种可能性是你需要一个占位符来存储&#34;名称&#34;您尚未填充列表的元素的属性。如果元素具有已知长度和已知类型,则可以使用例如分配这样的矢量。 numeric(1) {&#34;准备好了#34;可以命名的矢量。如果您不知道输出的数据结构,我就不会使用这种方法,因为它可能是一个真正的记忆力来构建&#34; R中的数据结构。

答案 2 :(得分:0)

其他可能性

as.list(a)
# $`number`
# [1] 30

# or
setNames(list(unname(a)),'number')
# $`number`
# [1] 30

# or named list with named vector
setNames(list(a), 'number')
# $`number`
# number 
# 30