我有一个名为my_list_of_lists
的列表列表,我想从中选择一定数量的元素。
my_list_of_lists
的元素1,我想随机选择1个元素my_list_of_lists
的元素2,我想随机选择1个元素my_list_of_lists
的元素3,我想随机选择2个元素以下是my_list_of_lists
和number_to_select
:
my_list_of_lists <- list(
c(147, 313, 337, 546),
c(35, 135, 281, 283, 325, 326, 357),
c(311, 334, 403, 427, 436, 507, 520, 566, 595, 632))
number_to_select <- c(1, 1, 2)
我可以单独做这个没问题。例如:
sample(my_list_of_lists[[3]],number_to_select[[3]])
#[1] 520 436
但是当我尝试使用lapply
时,我无法理解:
selected_vals = lapply(my_list_of_lists, function(x) { sample(x, number_to_select)})
selected_vals[[3]]
#[1] 334
如何使用lapply
从第一个列表中选择1个元素,从第二个列表中选择1个元素,从第三个列表中选择2个元素?
答案 0 :(得分:2)
您希望迭代多个集合,因此您应该使用Map
。例如
Map(sample, my_list_of_lists, number_to_select)
将使用sample
和my_list_of_lists
的相应值多次调用numbers_to_select
来执行您想要的操作。
答案 1 :(得分:0)
以下是来自purrr::map2
的{{1}}的相应解决方案。您无法在此处使用tidyverse
,因为您希望同时映射两个对象。通常,以可重现的格式提供输入是有帮助的,而不仅仅是lapply
。
head()
由reprex package(v0.2.0)创建于2018-03-14。