将列表项更改为名称R.

Gia*_*nni 6 r list

我有很多看起来像这样的列表

: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
Run Code Online (Sandbox Code Playgroud)

等等73次

所以列表中有73个列表.这些列表的每个部分都包含两个项目.但事实上它是一个项目,第二个项目是价值.如何以自动方式更改列表,使其看起来像这样:

:List of 73
$ aaaa: num 2
$ cccc: num 7
$ dddd: num 5
$ bbbb: num 6
Run Code Online (Sandbox Code Playgroud)

等等73次

我有很多列表看起来像这样,但每次"aaaa"在不同的地方,所以手动更改是非常耗时的.

Fra*_*ank 6

对于每一个元素xmylist,您可以访问第一子列表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
Run Code Online (Sandbox Code Playgroud)

setNames(x,xnames)只返回x标有的元素xnames.


不使用列表.您可能不需要a list并且可以使用向量,这更简单:

  • 在我的回答中,切换lapplysapply.
  • 在ColonelBeauvel's中,删除as.list呼叫.

按名称访问其元素非常直观:

myvec <- setNames(sapply(mylist,`[[`,2),sapply(mylist,`[[`,1))
myvec["aa"]
# aa 
#  2 
Run Code Online (Sandbox Code Playgroud)