R map() 将 2 层映射到列表中

标签 r nested-lists purrr

我坚持做嵌套的map()或者map()管道。

我在对象“输出”中有一个包含 4 个输出的列表。四个输出中的每一个都有一个元素“parameters”,它是 3 个元素的列表。第一个元素是“非标准化”

从查看工具中,我可以看到从任何一个输出获取非标准化参数的代码

output[["ar.4g_gm.pr.dual..semi.inv..phantom.out"]][["parameters"]][["unstandardized"]])

我尝试在输出上使用映射来提取通过管道传输到map_dfr的参数来提取和rbind非标准化参数,这完成了工作...

x<- map(output,"parameters") %>% map_dfr("unstandardized")

但我想在结果的列中包含顶级列表元素名称(即输出文件)。

有没有办法嵌套映射函数或其他语法来将 4 个顶级列表元素名称放入列中?

这是带有虚拟数据的语句。我工作,但我需要 cbind rep(c"out1","out2","out3",each=5) 到结果,我希望它在没有 cbind 的情况下发生。

output <- list(out1=list(e1=c(1,2,3),
                          e2=c(T,F,T),
                         parm=list(a = as.data.frame(matrix(sample(101:999,size=40,replace=TRUE),nrow=5)),
                                   b = as.data.frame(matrix(sample(101:999,size=40,replace=TRUE),nrow=5)),
                                   stand = cbind(as.data.frame(matrix(sample(101:999,size=40,replace=TRUE),nrow=5)),grp=rep(1,times=5)))),
               out2=list(e1=c(3,4,5),
                         e2=c(T,F,T),
                         parm=list(a = as.data.frame(matrix(sample(101:999,size=40,replace=TRUE),nrow=5)),
                                   b = as.data.frame(matrix(sample(101:999,size=40,replace=TRUE),nrow=5)),
                                   stand = cbind(as.data.frame(matrix(sample(101:999,size=40,replace=TRUE),nrow=5)),grp=rep(2,times=5)))),
               out3=list(e1=c(1,2,3),
                         e2=c(T,F,T),
                         parm=list(a = as.data.frame(matrix(sample(101:999,size=40,replace=TRUE),nrow=5)),
                                   b = as.data.frame(matrix(sample(101:999,size=40,replace=TRUE),nrow=5)),
                                   stand = cbind(as.data.frame(matrix(sample(101:999,size=40,replace=TRUE),nrow=5)),grp=rep(3,times=5)))) )

output[["out1"]][["parm"]][["stand"]]               

map(output,"parm") %>% map_dfr("stand")

最佳答案

library(purrr)
library(dplyr)

map(output, pluck, "parm", "stand") %>% 
  bind_rows(.id = "foo")
#     foo  V1  V2  V3  V4  V5  V6  V7  V8 grp
# 1  out1 845 527 296 902 358 447 317 347   1
# 2  out1 679 473 290 482 349 691 144 731   1
# 3  out1 842 574 135 894 628 542 757 174   1
# 4  out1 379 548 836 176 796 744 889 922   1
# 5  out1 498 837 492 965 255 508 138 689   1
# 6  out2 203 599 158 355 793 884 722 210   2
# 7  out2 543 693 484 195 511 174 793 654   2
# 8  out2 593 839 296 926 387 788 260 143   2
# 9  out2 373 363 323 939 416 348 792 211   2
# 10 out2 773 218 616 806 119 304 775 775   2
# 11 out3 171 217 859 899 664 737 114 837   3
# 12 out3 953 225 600 581 528 388 714 899   3
# 13 out3 615 550 860 134 667 136 987 993   3
# 14 out3 494 407 726 128 559 418 782 832   3
# 15 out3 729 734 432 354 716 288 734 264   3

关于R map() 将 2 层映射到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47860324/

相关文章:

c# - 为什么我的列表中的成员会被所述列表的最后一个成员覆盖?

python - 两个列表列表之间的公共(public)元素(嵌套列表的交集)

r - purrr::map中的第一个波浪号是什么意思

r - 将 NAD83 状态平面坐标转换为 WS84 标准经度/纬度(以度为单位)

r - 不要使用facet_grid显示空的facet

python - 使用 importr 从 Python 中的 R 包中调用函数

python - 将展平的一维索引转换为二维索引

r - 访问嵌套列表中的数据帧

r - ggplot 使用 purrr map() 绘制具有多个 y 的相同 x

r - 绘制不相交的圆