我有很多看起来像这样的列表
:List of 73
..$ :List of 2
.. ..$: chr "aaaa"
.. ..$: num 2
..$ :List of 2
.. ..$: chr "cccc"
.. ..$: num 7
..$ :List of 2
.. ..$: chr "dddd"
.. ..$: num 5
..$ :List of 2
.. ..$: chr "bbbb"
.. ..$: num 6
等等 73 次
所以列表中有 73 个列表。这些列表的每个部分都包含两个项目。但实际上它是一项,第二项是值。如何以自动方式更改列表,使其看起来像这样:
:List of 73
$ aaaa: num 2
$ cccc: num 7
$ dddd: num 5
$ bbbb: num 6
等等 73 次
我有很多类似这样的列表,但是每次“aaaa”都在不同的位置,因此手动更改非常耗时。
最佳答案
对于每个元素 x
的 mylist
,您可以使用 x[[1]]
访问第一个子列表;第二个是 x[[2]]
.此函数也可以称为 `[[`(x,i)
哪里i
是子列表的编号。
mylist <- list(list("aa",2),list("cc",7))
str(mylist)
# List of 2
# $ :List of 2
# ..$ : chr "aa"
# ..$ : num 2
# $ :List of 2
# ..$ : chr "cc"
# ..$ : num 7
mynewlist <- setNames(lapply(mylist,`[[`,2),sapply(mylist,`[[`,1))
str(mynewlist)
# List of 2
# $ aa: num 2
# $ cc: num 7
setNames(x,xnames)
刚刚返回 x
其元素标记为 xnames
.不使用列表。 您可能不需要
list
并且可以使用更简单的向量:lapply
至 sapply
. as.list
称呼。 按名称访问其元素非常直观:
myvec <- setNames(sapply(mylist,`[[`,2),sapply(mylist,`[[`,1))
myvec["aa"]
# aa
# 2
关于r - 将列表项更改为名称 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126829/