所以我们知道R有list()变量,并且知道R有函数调用names()来给变量命名.例如 :
a=30
names(a)="number"
a
# number
# 30
Run Code Online (Sandbox Code Playgroud)
但现在,我想给列表变量一个名称,如下所示:
b=list()
names(b)="number"
Run Code Online (Sandbox Code Playgroud)
它会返回如下错误消息:
Error in names(b) = "number" :
'names' attribute [1] must be the same length as the vector [0]
Run Code Online (Sandbox Code Playgroud)
我想要做什么?我这样做是因为我需要很多列表变量.或者,你有另一种方式,所以我可以制作许多列表变量而不用它的名字?
Tim*_*sen 19
由于@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
Run Code Online (Sandbox Code Playgroud)
似乎您对标记对象本身而不是其中的元素感兴趣。关键是names列表对象的属性必须分配给它的元素。一种选择,因为你说你有很多列表对象,是将列表存储在一个大列表中,然后你可以为大列表分配名称,并且列表对象中的元素也可以被命名。
allLists <- list('number' = list())
> allLists
$number
list()
Run Code Online (Sandbox Code Playgroud)
另一种选择,您可以使用包中的label功能Hmisc。它将 R 中最常见的对象修改为具有“标记”的子类,因此每当您打印列表时,它都会显示标签。它有利于文档和更好地组织工作区,但需要注意的是,很容易意外将标记的对象转换为非标记的类,并混淆不考虑搜索多个类的方法。
library(Hmisc)
p <- list()
label(p) <- 'number'
> p
number
list()
Run Code Online (Sandbox Code Playgroud)
另一种选择是使列表对象的“名称”成为列表的实际元素。您会在许多复杂的 R 数据结构中看到,这是在出现此类需求时存储标签、标题或名称的首选方式,并且基本 R 数据结构无法满足。
b <- list('name' = 'number')
Run Code Online (Sandbox Code Playgroud)
最后一种可能性是您需要一个占位符来存储尚未填充列表的元素的“名称”属性。如果元素的长度和类型已知,则您可以使用例如numeric(1)可以命名的某种“素数”向量来分配这样的向量。如果您不知道输出的数据结构,我不会使用这种方法,因为在 R 中“构建”数据结构可能会占用大量内存。