R:在 purrr::pmap() 中使用列表的重复元素

R: Repeating elements of a list for usage in purrr::pmap()

这只是一件 "cosmetical" 的事情,但我无法让它工作。 :(

我有一个嵌套列表要传递给 pmap()。一些元素在子列表中重复出现。我正在寻找一种优雅的方式在子列表中多次重复元素。

元素较少的简化示例:

arg_list <- list(url = x,
                 category = c("/activity",
                              "/current",
                              "/desktop",
                              "/login/user",
                              "/message",
                              "/forum"),
                 action = list(c("ACTIVITY_RESUME", "ACTIVITY_PAUSE"),
                               c("FRAGMENT_RESUME", "FRAGMENT_PAUSE"),
                               c("FRAGMENT_RESUME", "FRAGMENT_PAUSE"),
                               c("onResume", "onPause"),
                               c("onResume", "onPause"),
                               c("onResume", "onPause"))


get_durations <- function(x, category, action) { ... }   


durations <- pmap(.l = arg_list, safely(get_durations))

例如,我想重复c("onResume", "onPause")三遍,而不是手动输入。

我尝试了 rep(list(c("onResume", "onPause")), times = 3) 的各种变体,但无法提取所需的元素。

谢谢! :)

rep(list(c("onResume", "onPause")), times = 3) 应该可以。似乎有什么问题?

如果你需要将不同的向量重复不同的次数,你可以使用map2(注意flatten的用法将最终的list-of-lists转换为向量列表):

map2( list(c("ACTIVITY_RESUME", "ACTIVITY_PAUSE"),
           c("FRAGMENT_RESUME", "FRAGMENT_PAUSE"),
           c("onResume", "onPause")), 
      1:3, ~rep(list(.x), .y) ) %>% purrr::flatten()
# [[1]]
# [1] "ACTIVITY_RESUME" "ACTIVITY_PAUSE" 
#
# [[2]]
# [1] "FRAGMENT_RESUME" "FRAGMENT_PAUSE" 
#
# [[3]]
# [1] "FRAGMENT_RESUME" "FRAGMENT_PAUSE"
#
# [[4]]
# [1] "onResume" "onPause"
#
# [[5]]
# [1] "onResume" "onPause" 
#
# [[6]]
# [1] "onResume" "onPause"