r - 将列表列表的维度组合成单独的向量
问题描述
这是我的数据示例。
ll <- list(
ll1 = list(Mi = 1:4,
Mj = 10:13,
dn = "l1"),
ll2 = list(Mi = 5:8,
Mj = 14:17,
dn = "l2"))
> str(ll)
List of 2
$ ll1:List of 3
..$ Mi: int [1:4] 1 2 3 4
..$ Mj: int [1:4] 10 11 12 13
..$ dn: chr "l1"
$ ll2:List of 3
..$ Mi: int [1:4] 5 6 7 8
..$ Mj: int [1:4] 14 15 16 17
..$ dn: chr "l2"
我正在尝试将每个 Mi、每个 Mj 和每个 dn 组合在一起。所以最终结果将是 3 个向量:1 个组合的 Mi、1 个组合的 Mj 和 1 个组合的 dn。即, Mi 的最终结果将类似于
> c(ll$ll1$Mi,ll$ll2$Mi)
[1] 1 2 3 4 5 6 7 8
Mj 和 dn 的最终结果相似。我想知道如何简单地做到这一点,最好使用来自 tidyverse 的东西。列表的数量会有所不同,通常不会是 2,这就是为什么我不认为 c 是一个很好的解决方案。我猜地图功能可以在这里工作,但我还没有找到解决方案。
解决方案
pmap
从purrr
. _ pmap
获取输入列表(在本例中为两个列表的列表)并将c
函数应用于ll[[1]][[1]]
, ll[[2]][[1]]
, ... 然后ll[[1]][[2]]
, ll[[2]][[2]]
, ... 等等:
library(purrr)
pmap(ll, c)
输出:
$Mi
ll11 ll12 ll13 ll14 ll21 ll22 ll23 ll24
1 2 3 4 5 6 7 8
$Mj
ll11 ll12 ll13 ll14 ll21 ll22 ll23 ll24
10 11 12 13 14 15 16 17
$dn
ll1 ll2
"l1" "l2"
如果我们不想保留向量名称,我们可以使用以下use.names
参数c
:
pmap(ll, c, use.names = FALSE)
输出:
$Mi
[1] 1 2 3 4 5 6 7 8
$Mj
[1] 10 11 12 13 14 15 16 17
$dn
[1] "l1" "l2"
推荐阅读
- reactjs - 如何通过与 Cypress 的子级排序获得长度?
- php - Woocommerce 库存通知器 Api
- eclipse - 如何使用 Eclipse Milo 按顺序写入两个 OPC-UA 数组元素?
- regex - sub 返回匹配的正则表达式组
- python - 为什么 Ubuntu 系统包会显示 pip freeze/我如何清理 pip freeze?
- php - PHP 当重写页面 url 然后 $_get 不起作用
- php - Symfony mailer raw content is weird, contains =20 =3D =
- java - 如何在 Vaadin 14 中播放 .mp3 文件
- sql - 如何检索每个对话的最后一条消息?
- c# - 控制台应用程序更新到 .Net Core 3.1 错误找不到框架“Microsoft.AspNetCore.App”,版本“3.1.0”