从 purrr 获取地图以使用 paste0
Getting map from purrr to work with paste0
我有 9 个列表,下面有 objects groupings$ag。我正在尝试从 9 个列表中的每一个中提取 object,并将它们放入 tibble/df 的列中。第一列应该有组 1:5。随后的 9 列每列都是一个包含 5 个数字的简单向量。抱歉,这不完整且无法重现..
map(hof2009_ag$groupings, "ag") %>% unlist
会正确地给我一个向量
[1] 789 615 525 425 352
但是如果我动态地使用带有 paste0 的地图,它将无法工作:
map(paste0("hof", i,"_ag$groupings"), "ag")
.
因此,我试图获取标题为 hof2009:hof2017 的 9 个列表,它们通过 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],但只要 map 不适用于粘贴就无法正常工作。
如果我使用:
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"), alternatives = c("Harold.Baines", "Bert.Blyleven"、"Alan.Trammell"
), number_decision_makers = 60L, num_alts = 14L, groupings = 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), iters = 1, run_time = c(elapsed = 1.12999999999738), grp2 = structure(list(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", "data.frame")), list(prefs = structure(list(rank = c(0L, 3L, 2L), rank.1 = c(2L, 4L, 2L)), class = "data.frame", row.names = c("Harold.Baines", "Bert.Blyleven", "Andre.Dawson", "Alan.Trammell"), ag = 615L, grp = c(1L, 1L, 1L), iters = 4, run_time = c(elapsed = 5.61000000000058) , grp2 = 结构(列表(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), 等级.2 = c(1L, 2L, 2L))
一个可重现的例子会很有用。根据显示的代码,使用 mget
和 paste
获取全局环境中的对象,然后循环遍历 list
元素,select
'groupings' list
元素和 'ag'(嵌套 list
)与 $
或 [[
library(tidyverse)
mget(paste0("hof", 2009:2017, "_ag")) %>%
map(~ map(.x$groupings, ~ .x$ag))
我有 9 个列表,下面有 objects groupings$ag。我正在尝试从 9 个列表中的每一个中提取 object,并将它们放入 tibble/df 的列中。第一列应该有组 1:5。随后的 9 列每列都是一个包含 5 个数字的简单向量。抱歉,这不完整且无法重现..
map(hof2009_ag$groupings, "ag") %>% unlist
会正确地给我一个向量
[1] 789 615 525 425 352
但是如果我动态地使用带有 paste0 的地图,它将无法工作:
map(paste0("hof", i,"_ag$groupings"), "ag")
.
因此,我试图获取标题为 hof2009:hof2017 的 9 个列表,它们通过 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],但只要 map 不适用于粘贴就无法正常工作。
如果我使用:
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"), alternatives = c("Harold.Baines", "Bert.Blyleven"、"Alan.Trammell" ), number_decision_makers = 60L, num_alts = 14L, groupings = 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), iters = 1, run_time = c(elapsed = 1.12999999999738), grp2 = structure(list(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", "data.frame")), list(prefs = structure(list(rank = c(0L, 3L, 2L), rank.1 = c(2L, 4L, 2L)), class = "data.frame", row.names = c("Harold.Baines", "Bert.Blyleven", "Andre.Dawson", "Alan.Trammell"), ag = 615L, grp = c(1L, 1L, 1L), iters = 4, run_time = c(elapsed = 5.61000000000058) , grp2 = 结构(列表(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), 等级.2 = c(1L, 2L, 2L))
一个可重现的例子会很有用。根据显示的代码,使用 mget
和 paste
获取全局环境中的对象,然后循环遍历 list
元素,select
'groupings' list
元素和 'ag'(嵌套 list
)与 $
或 [[
library(tidyverse)
mget(paste0("hof", 2009:2017, "_ag")) %>%
map(~ map(.x$groupings, ~ .x$ag))