То, что прокомментировал MrFlick, является основной причиной вашей проблемы, но в вашем примере все еще есть некоторое несоответствие.Мы можем использовать пакет rlang
, чтобы увидеть, что dplyr
делает с вашим вводом, что, кстати, на самом деле не волшебно, а просто использует стандартные функции R для нестандартной оценки (R все-таки должен анализировать ваш код).
Сначала выражение, которое было дано filter
без лишних скобок:
library(rlang)
exprs(cyl == 4 & grepl("Toyota", name) |
(cyl == 6 | cyl == 8), grepl("Mazda", name))
[[1]]
cyl == 4 & grepl("Toyota", name) | (cyl == 6 | cyl == 8)
[[2]]
grepl("Mazda", name)
Так что после объединения всего с &
вы получите выражение, которое хотите, но чтоважно отметить, что вы получаете 2 выражения, потому что их разделяет запятая, и filter
будет анализировать каждое отдельно, используя стандартные правила R.Вы можете написать это выражение для ясности:
exprs(cyl == 4 & grepl("Toyota", name) | (cyl == 6 | cyl == 8),
grepl("Mazda", name))
Если вы добавите дополнительные скобки, filter
увидит одно выражение со всем, что вы написали.Если бы R попытался разобрать это выражение, он увидел бы (после удаления скобок):
cyl == 4 & grepl("Toyota", name) | (cyl == 6 | cyl == 8), grepl("Mazda", name)
Что, как сказал MrFlick, недопустимо в R.