Если мы хотим выполнить соответствующие проверки, может быть лучше использовать map2
library(dplyr)
library(purrr)
map2_df(mtcars_cols, mtcars_numbs, ~
mtcars %>%
filter(!! rlang::sym(.x) == .y)) %>%
distinct
ПРИМЕЧАНИЕ. Сравнение (==
) с числами с плавающей запятой может привести к проблемам, так как точность может варьироваться и приводить к FALSE
Кроме того, обратите внимание, что ==
работает только тогда, когда элементы lhs
и rhs
имеют одинаковую длину или вектор rhs
имеет length
1 (здесь происходит переработка). Если length
больше 1 и не равно длине вектора lhs, рециркуляция будет сравниваться в порядке столбцов.
Мы можем rep
разрешить сделать длину равной, и теперь она должна работать
mtcars %>%
mutate(
myset = rowSums(select(., mtcars_cols) == mtcars_numbs[col(select(., mtcars_cols))]) > 0
) %>% pull(myset) %>% sum
#[1] 8
В приведенном выше коде select
используется дважды для лучшего понимания. В противном случае мы также можем использовать rep
mtcars %>%
mutate(
myset = rowSums(select(., mtcars_cols) == rep(mtcars_numbs, each = n())) > 0
) %>%
pull(myset) %>%
sum
#[1] 8