使用 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))
这是我的清单
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))