R语言 给列表变量命名

qnzebej0  于 2023-06-19  发布在  其他
关注(0)|答案(4)|浏览(182)

所以我们知道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]

我该怎么办?我这样做是因为我需要很多列表变量。或者,你有没有其他方法,让我可以创建许多列表变量,而不玩它的名字?

taor4pac

taor4pac1#

由于@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
3bygqnnd

3bygqnnd2#

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

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

> allLists
$number
list()

另一种选择是,您可以使用Hmisc包中的label功能。它修改了R中最常见的对象,使其具有一个子类“labeled”,因此每当你打印列表时,它都会显示标签。这对于文档和更好地组织工作区是很好的,但是警告很容易意外地将标签对象转换为非标签类,并混淆那些不想搜索多个类的方法。

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

> p
number
list()

另一种选择是让列表对象的“名称”成为列表的实际元素。在许多复杂的R数据结构中,当出现这种需求并且基本R数据结构无法满足时,这是存储标签、标题或名称的首选方式。

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

最后一种可能性是,您需要一个占位符来存储尚未填充列表的元素的“names”属性。如果元素的长度和类型已知,则可以使用例如:numeric(1)一种可命名的“引发”载体。如果您不知道输出的数据结构,我不会使用这种方法,因为在R中“构建”数据结构真实的占用内存。

q0qdq0h2

q0qdq0h23#

其他可能性是

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
ma8fv8wu

ma8fv8wu4#

我构造了一个1列的矩阵
然后使用names()函数分配名称
然后用as.list()函数将其转换为列表
解决了我的问题

valueVec <- matrix(1:10, ncol=1) 
names(valueVec) <- 1:10
listem <- as.list(valueVec)

相关问题