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"
这只是一件 "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"