从purrr获取地图以使用paste0

时间:2018-08-10 14:18:52

标签: r dplyr purrr

我有9个列表,其中包含对象分组$ ag。我正在尝试从9个列表中的每个列表中提取该对象,并将它们分成小节/ df。第一栏应具有1:5组。随后的9列,每个都是5个数字的简单向量。抱歉,此操作不完整且不可复制。

map(hof2009_ag$groupings, "ag") %>% unlist会正确地给我一个向量

[1] 789 615 525 425 352

,但是如果我动态地将map和paste0一起使用map,它将无法工作:
map(paste0("hof", i,"_ag$groupings"), "ag")

因此,我试图获取9个名为hof2009:hof2017的列表,这些列表通过使用迭代器的for循环进行映射以访问每个列表。当我尝试使用paste0动态创建hof(i)_ag $ groupings时,它不再适用于地图。

ag <- tibble(group=1:5)
for (i in 2009:2017) {
temp <- paste0("hof", i,"_ag$groupings") #works, "hof2009_ag$groupings"
TEST <- temp %>% map("ag") %>% unlist #fails, produces NULL
TEST <- hof2009_ag$groupings %>% map("ag") %>% unlist #works, produces 789 615 525 425 352
#ag <- map(temp, "ag") %>% unlist #doesn't work on "temp"
}

第二个问题是如何使它们添加为列。我玩过add_column,mutate和ag [,i-2008],但只要地图不适用于粘贴,就无法使其正常工作。

如果我使用:

mget(paste0("hof", 2009:2009, "_ag")) %>%
map("groupings") %>% str 

我得到:

List of 1
 $ hof2009_ag:List of 5
 ..$ :List of 6
 .. ..$ prefs   :'data.frame':  14 obs. of  1 variable:
.. .. ..$ rank: int [1:14] 0 3 3 4 1 0 1 2 1 0 ...
.. ..$ ag      : int 789
.. ..$ grp     : int [1:60] 1 1 1 1 1 1 1 1 1 1 ...
.. ..$ iters   : num 1
.. ..$ run_time: Named num 1.13
.. .. ..- attr(*, "names")= chr "elapsed"
..$ :List of 6
.. ..$ prefs   :'data.frame':   14 obs. of  2 variables:
.. .. ..$ rank  : int [1:14] 0 3 4 5 2 1 2 3 1 1 ...
.. .. ..$ rank.1: int [1:14] 2 4 4 5 1 0 3 3 2 1 ...
.. ..$ ag      : int 615
.. ..$ grp     : int [1:60] 1 1 1 1 1 1 1 1 1 1 ...
.. ..$ iters   : num 4
.. ..$ run_time: Named num 5.61
.. .. ..- attr(*, "names")= chr "elapsed"

编辑:使用dput的示例

> dput(hof2009_ag)

list(decision_makers = c(“ Phil.Arvia”,“ Steve.Aschburner”,“ Filip.Bondy”,“ Bob.Verdi”),替代项= c(“ Harold.Baines”,“ Bert.Blyleven”, “艾伦·特拉梅尔” ),number_decision_makers = 60L,num_alts = 14L,分组= list(list(prefs = structure(list(rank = c(0L,3L,3L,4L,1L,0L,1L))),class =“ data.frame”, row.names = c(“ Harold.Baines”,“ Bert.Blyleven”,“ Alan.Trammell”)),ag = 789L,grp = c(1L,1L,1L),迭代次数= 1,run_time = c(经过= 1.12999999999738),grp2 =结构(列表(Decision_Maker = c(“ Phil.Arvia”,“ Steve.Aschburner”,“ Filip.Bondy”,“ Dave.Van.Dyck”,“ Bob.Verdi”),Group_Number = c (“ 1”,“ 1”,“ 1”,“ 1”,“ 1”)),row.names = c(NA,-60L),class = c(“ tbl_df”,“ tbl”,“数据。框架”))),列表(首选项=结构(列表(等级= c(0L,3L,2L),rank.1 = c(2L,4L,2L))),类=“ data.frame”,row.names = c(“ Harold.Baines”,“ Bert.Blyleven”,“ Andre.Dawson”,“ Alan.Trammell”),ag = 615L,grp = c(1L,1L,1L),迭代次数= 4,运行时间= c (经过= 5.61000000000058),grp2 =结构(list(Decision_Maker = c(“ Phil.Arvia”,“ Steve.Aschburner”,“ Steve.Wilmoth”,“ Dave.Van.Dyck”,“ Bob.Verdi”),Group_Number = c(“ 1”,“ 1”,“ 1”,“ 1”)),row.names = c(NA,-60L), class = c(“ tbl_df”,“ tbl”,“ data.frame”))),list(prefs = structure(list(rank = c(0L,3L,1L,1L),rank.1 = c(0L, 4L,2L),rank.2 = c(1L,2L,2L))

1 个答案:

答案 0 :(得分:1)

可重现的示例将很有用。根据显示的代码,使用mgetpaste获取全局环境中的对象,然后遍历list元素,select“分组” {{1} }元素和带有listlist的'ag'(嵌套$

[[