Что-то странное происходит с оценкой анонимной функции .x
.Если честно, я не уверен, что, но определение функции вне вызова map2
, кажется, работает нормально (кредит @Lionel Henry за бит ~ filter(df1, !!sym(.x) == .y)
:
library(tidyverse)
df <- tibble(variable=c("wool", "tension"),
value= c("A", "L"))
data(warpbreaks)
# doesn't work with anonymous function
tibble(variable=c("wool", "tension"),
value= c("A", "L")) %>%
mutate(data_filtered=map2(variable, value, ~ filter(warpbreaks, !!sym(.x) == .y)))
#> Error in is_symbol(x): object '.x' not found
# works when you define function outside of map2
temp <- function(x, y, data){
filter(data, !!sym(x) == y)
}
tibble(variable=c("wool", "tension"),
value= c("A", "L")) %>%
mutate(data_filtered=map2(variable, value, temp, warpbreaks))
#> # A tibble: 2 x 3
#> variable value data_filtered
#> <chr> <chr> <list>
#> 1 wool A <data.frame [27 x 3]>
#> 2 tension L <data.frame [18 x 3]>
Создано в 2019-05-07 пакетом Представления (v0.2.1)
Вы также можете сделать следующее без внешней функции:
tibble(variable=c("wool", "tension"),
value= c("A", "L")) %>%
mutate(data_filtered = map2(variable, value, ~ filter(..3, ..3[[..1]] == ..2), warpbreaks))
#> # A tibble: 2 x 3
#> variable value data_filtered
#> <chr> <chr> <list>
#> 1 wool A <data.frame [27 x 3]>
#> 2 tension L <data.frame [18 x 3]>