Я бы предположил (основываясь на общих знаниях и кратком обзоре ответов на вопрос "Опасность подмножества ()" ), что опасности subset
представляют собой внутренние опасности не-стандартная оценка (NSE);если вы хотите иметь возможность передать универсальное выражение и оценить его в контексте фрейма данных, я думаю, вы более или менее застряли с subset()
или чем-то подобным.
Если бы вы былижелая использовать более ограниченный набор выражений, таких как var
, vals
(ищет случаи, когда переменная, индексированная строкой var
принимает значения в векторе vals
), вы можете использовать
d[d[[var]] %in% vals, ]
Здесь var
является строкой , а не символом обнаженного R ("cyl"
вместо cyl
);однозначно, что вы хотите извлечь его из фрейма данных.
Вы можете расширить это на вектор переменных и список векторов значений:
for (i in seq_along(vars)) {
d <- d[d[[vars[i]]] %in% vals[[i]], ]
}
, но если вы хотитеполная гибкость выражений (например, чтобы иметь возможность использовать ESL == 1 & type == 4
или ESL == 1 | type == 4
или неравенства, основанные на числовых переменных). Я думаю, что вы застряли с подходом на основе NSE.
Возможно, чтоНовый механизм "Tidy Eval" (в пакете rlang
, подробно описанный здесь ) даст вам немного более принципиальный подход, но я не думаю, что опасности полностью исчезнут.