使用 map 函数过滤具有列表名称的 data.frame 元素

Using map function to filter a data.frame element with list names

这是我的清单

mylist <- list(setosa = iris,versicolor = iris, virginica = iris)

我必须使用 filter dplyr 功能。但是参数应该是 map interate 的列表元素的名称,因为我的列表要大得多:

map(mylist, ~ .x %>% filter(Species == 'name_of_(.x)_element_list')

我试过这样做,但没有成功:

map(mylist, ~ .x %>% filter(Species == {{names(.x)}})

任何帮助

你可以试试这个:

map2(mylist, names(mylist), \(l, n) filter(l, Species == n))

编辑:或使用 purrr 风格的 lambda 函数:

map2(mylist, names(mylist), ~ filter(.x, Species == .y))

我想我们也可以在这里使用 imap 函数,但我希望我能正确理解您的想法。它与 map2 非常相似,就像 .x 迭代值和 .y 迭代名称(位置)一样:

library(purrr)

mylist %>%
  imap(~ .x %>% filter(Species == .y))

使用base R

Map(function(x, y) subset(x, Species == y),mylist, names(mylist))