命名列表列表

时间:2012-12-10 23:45:42

标签: r

我有一个结构列表列表:

[[1]]
[[1]][[1]]
vector a

[[1]][[2]]
vector b

[[1]][[3]]
vector c

[[1]][[4]]
vector d

我想将其重命名为:

[["main name"]]
[["subname 1"]][[1]]
vector a
[["subname 1"]][[2]]
vector b

[["subname 2"]][[1]]
vector c
[["subname 2"]][[2]]
vector d

我不知道是否可以这样做,或者我是否需要不同的数据结构。 拜托,我想就此提出一些建议。

2 个答案:

答案 0 :(得分:4)

您可以使用names在列表中分配和获取姓名(请参阅?names)。

例如,如果我列出与你的列表类似的列表(我注意到你的例子中第一个列表的结构不等于第二个列表的结构 - 你的第二个列表看起来嵌套了三个级别,而第一个是深层嵌套两个级别:

myList <- list( list('vector a', 'vector b', 'vector c', 'vector d') )
# > myList
# [[1]]
# [[1]][[1]]
# [1] "vector a"
# 
# [[1]][[2]]
# [1] "vector b"
# 
# [[1]][[3]]
# [1] "vector c"
# 
# [[1]][[4]]
# [1] "vector d"

我可以使用

将列表名称分配到顶层
names(myList) <- c('main name')

这允许我将myList[[1]]作为myList[['main name']]。 我现在可以将列表名称分配给myList[['main name']],如下所示:

names(myList[['main name']]) <- c('subname 1', 'subname 2', 'subname 3', 'subname 4')

现在,如果你myList[['main name']][['submname 1']],你将获得"vector a"

注意 - 我建议你不要在你的名字中使用空格,因为那时你不能使用语法糖myList$column_name

例如(此列表的结构更像您在问题中的第二个结构,为您提供另一个示例):

myList <- list( list('a', 'b'), list('c', 'd') )
names(myList) <- c('subname_1', 'subname_2')
myList$subname_1
# list('a', 'b')
# we can do list names one level deeper too if you like
names(myList$subname_1) <- c('a', 'b')
myList$subname_1$a
# 'a'

此外,可以在列表构造上而不是之后分配名称:

myList <- list( subname_1=list(a='a', b='b'), subname_2=list(c='c', d='d') )

答案 1 :(得分:0)

myList <- list( list('vector a', 'vector b', 'vector c', 'vector d') )
names(myList) <- c('main name')
names(myList)

[1] "main name"

names(myList[['main name']]) <- c('subname 1', 'subname 2', 'subname 3', 'subname 4')

names(myList[['main name']]) 

[1] "subname 1" "subname 2" "subname 3" "subname 4"

myList[['main name']][['submname 1']] #What am I doing wrong here?
NULL

 myList[[1]][[1]]
[1] "vector a"

 myList['main name']
$`main name`
$`main name`$`subname 1`
[1] "vector a"

$`main name`$`subname 2`
[1] "vector b"

$`main name`$`subname 3`
[1] "vector c"

$`main name`$`subname 4`
[1] "vector d"