1) sym - Мы можем конвертировать в sym
bols и eval
uate (!!
). [[
используется в основном для извлечения list
элементов. Поскольку OP показывал оба 'vars' и 'cond' как vector
s [
достаточно для извлечения каждого элемента
nycflights13::planes %>%
filter(
!!rlang::sym(vars[1]) == cond[1],
!!rlang::sym(vars[2]) == cond[2]
)
2) parse_expr- Опцияэто создать выражение с paste
или str_c
из stringr
, а затем проанализировать это выражение
expr1 <- str_c(vars, str_c('"', cond, '"'), sep="==", collapse=" & ")
nycflights13::planes %>%
filter(!! rlang::parse_expr(expr1))
# A tibble: 298 x 9
# tailnum year type manufacturer model engines seats speed engine
# <chr> <int> <chr> <chr> <chr> <int> <int> <int> <chr>
# 1 N10156 2004 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 2 N10575 2002 Fixed wing multi engine EMBRAER EMB-145LR 2 55 NA Turbo-fan
# 3 N11106 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 4 N11107 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 5 N11109 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 6 N11113 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 7 N11119 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 8 N11121 2003 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 9 N11127 2003 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
#10 N11137 2003 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# … with 288 more rows
3) map2 / reduce - Если у нас большеодин столбец, тогда мы могли бы использовать filter_at
, но здесь «cond» разные. Итак, один из вариантов map2
library(purrr)
library(dplyr)
map2(vars, cond, ~ nycflights13::planes %>%
transmute(ind = !! rlang::sym(.x) == .y) %>%
pull(ind)) %>%
reduce(`&`) %>%
filter(nycflights13::planes, .)
# A tibble: 298 x 9
# tailnum year type manufacturer model engines seats speed engine
# <chr> <int> <chr> <chr> <chr> <int> <int> <int> <chr>
# 1 N10156 2004 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 2 N10575 2002 Fixed wing multi engine EMBRAER EMB-145LR 2 55 NA Turbo-fan
# 3 N11106 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 4 N11107 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 5 N11109 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 6 N11113 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 7 N11119 2002 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 8 N11121 2003 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# 9 N11127 2003 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
#10 N11137 2003 Fixed wing multi engine EMBRAER EMB-145XR 2 55 NA Turbo-fan
# … with 288 more rows