使用R中的lapply从列表列表中选择元素

时间:2018-03-14 20:47:26

标签: r lapply

我有一个名为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_listsnumber_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个元素?

2 个答案:

答案 0 :(得分:2)

您希望迭代多个集合,因此您应该使用Map。例如

Map(sample, my_list_of_lists, number_to_select)

将使用samplemy_list_of_lists的相应值多次调用numbers_to_select来执行您想要的操作。

答案 1 :(得分:0)

以下是来自purrr::map2的{​​{1}}的相应解决方案。您无法在此处使用tidyverse,因为您希望同时映射两个对象。通常,以可重现的格式提供输入是有帮助的,而不仅仅是lapply

head()

reprex package(v0.2.0)创建于2018-03-14。