【发布时间】:2020-11-07 00:12:24
【问题描述】:
我自己制作了一个巨大的嵌套列表结构,如下所示:
str(CMaster)
List of 4
$ :List of 6
..$ :List of 5
.. ..$ :List of 15
.. .. ..$ : num [1, 1:14] 0.144 0.2 0.256 0.352 0.446 ...
.. .. ..$ : num [1, 1:47] 0.144 0.2 0.375 0.54 0.694 ...
etc
$ :List of 6
..$ :List of 1
.. ..$ :List of 15
.. .. ..$ : num [1, 1:14] 0.144 0.2 0.256 0.352 0.446 ...
.. .. ..$ : num [1, 1:47] 0.144 0.2 0.375 0.54 0.694 ...
结构是固定的,但最后的 15 个列表可能会达到 150K,我需要尝试绘制这个结构。我想尝试绘制由 6 个类似列表中的每一个的 4 个变量的列表分类的箱线图,它将 15 个列表的所有数值数据浓缩到这个例子中。我需要先将其全部取消吗?有没有更简单的方法来制作一个 data.frame 或 data.table 来保留列表的名称并使它们成为绘图的因素?
dfs <- lapply(CMaster, data.frame, stringsAsFactors = FALSE)
编辑:我添加了示例代码
示例代码(接近真实结构)。
D<-list()
DNSIM<-list()
DTime<-list()
DMaster<-list()
for(CC in 1:4){
for(t in 1:6){
for(N in 1:5){
for(i in 1:15){
Dmatrix=runif(15)
D[[i]]=Dmatrix
}
DTime[[t]]=D
}
DNSIM[[N]]=DTime
}
DMaster[[CC]]=DTime
}
输入
它太大而无法复制,我的组织不允许共享指向 onedrive 的链接。有什么简单的解决方法吗?
EDIT2
tibble(lists = CMaster) %>%
+ mutate(CleaningType = row_number()) %>%
+ unnest_longer(lists, indices_to = "TimePoint") %>%
+ unnest_longer(lists, indices_to = "Replicate") %>%
+ unnest_longer(lists, indices_to = "BehaviourObservation")
# A tibble: 1,800 x 5
lists BehaviourObservation Replicate TimePoint CleaningType
<list> <int> <int> <int> <int>
1 <dbl[,14] [1 × 14]> 1 1 1 1
2 <dbl[,47] [1 × 47]> 2 1 1 1
3 <dbl[,11] [1 × 11]> 3 1 1 1
4 <dbl[,40] [1 × 40]> 4 1 1 1
5 <dbl[,40] [1 × 40]> 5 1 1 1
6 <dbl[,34] [1 × 34]> 6 1 1 1
7 <dbl[,92] [1 × 92]> 7 1 1 1
8 <dbl[,31] [1 × 31]> 8 1 1 1
9 <dbl[,5] [1 × 5]> 9 1 1 1
10 <dbl[,103] [1 × 103]> 10 1 1 1
# … with 1,790 more rows
所以我尝试添加另一个子子列表,但现在出现尺寸不兼容的错误。请问大家有什么想法吗?
tibble(lists = CMaster) %>%
+ mutate(CleaningType = row_number()) %>%
+ unnest_longer(lists, indices_to = "TimePoint") %>%
+ unnest_longer(lists, indices_to = "Replicate") %>%
+ unnest_longer(lists, indices_to = "BehaviourObservation") %>%
+ unnest_longer(lists, indices_to = "sub_sub_observation")
Error: Can't combine `..1$lists` <double[,14]> and `..2$lists` <double[,47]>.
✖ Incompatible sizes 14 and 47 along axis 2.
Run `rlang::last_error()` to see where the error occurred.
【问题讨论】:
-
你能分享一段我可以摆弄的数据(使用
dput())吗?据我所知,最简单的方法是取消嵌套。可能使用purrr::map_dfr(.x, .f, ..., .id = "id_col")之类的东西。 -
感谢您这么快回复。我已经包含了一个类似的数据结构示例,因为 dput 的输出太大而无法复制。
标签: r dataframe ggplot2 data.table