我有 9 个列表,其下有对象 groupings$ag。我试图从 9 个列表中的每个列表中提取该对象,并将它们放入 tibble/df 的列中。第一列应为组 1:5。随后的 9 列每列都是一个包含 5 个数字的简单向量。抱歉,这不完整且不可重现..
map(hof2009_ag$groupings, "ag") %>% unlist
将正确地给我一个向量
[1] 789 615 525 425 352
但是如果我动态使用带有paste0的map,它就无法工作:
map(paste0("hof", i,"_ag$groupings"), "ag")
。
所以,我试图获取 9 个列表,标题为 hof2009:hof2017,通过 for 循环映射,使用迭代器访问每个列表。当我尝试使用 Paste0 动态创建 hof(i)_ag$groupings 时,它不再适用于 map 。
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", “艾伦·特拉梅尔” ), 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), iters = 1, run_time = c(elapsed = 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", "data.框架"))), 列表(首选项 = 结构(列表(排名 = c(0L, 3L, 2L), 排名.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), iters = 4, run_time = c (经过= 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"))), 列表(首选项 = 结构(列表(排名 = c(0L, 3L, 1L, 1L), 排名.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))
关于r - 从 purrr 获取 map 以与paste0一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51788511/