r - 从 purrr 获取 map 以与paste0一起使用

标签 r dplyr purrr

我有 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) )

最佳答案

一个可重现的例子会很有用。根据显示的代码,使用mgetpaste获取全局环境中的对象,然后循环遍历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/

相关文章:

r - 如何使用purrr循环一个整齐的评估函数?

r - 在 R 中创建 "The Economist"样式图?

R 值之间的查找

R:将过滤条件列表传递到数据框中

r - dplyr: case_when 涉及很多案例

r - purrr::pluck - 如何获取列表的最后一个元素

r - 如何更改 ggplot2 构面的顺序

r - magrittr 包中的管道不适用于函数 rm()

r - 我可以用字节码编译我的R包吗?

在tidyverse中按组滚动回归?