dplyr использует концепцию, названную Нестандартная оценка (NSE), чтобы сделать столбцы из аргумента фрейма данных доступными для его функций без цитирования или использования синтаксиса dataframe$column
. В основном:
[Нестандартная оценка] - это всеобъемлющий термин, означающий, что они не следуют обычным правилам оценки R. Вместо этого они фиксируют введенное вами выражение и оценивают его по-своему. 1
В этом случае пользовательская оценка принимает аргумент (ы), заданный dplyr::filter
, и анализирует их, чтобы можно было использовать W
для ссылки на dataset$W
. Причина, по которой вы не можете затем взять эту переменную и использовать ее в другом месте, заключается в том, что NSE применяется только к области действия функции.
NSE делает компромисс: функции, которые изменяют область видимости, менее безопасны и / или непригодны для программирования, когда вы создаете программу, которая использует функции для изменения других функций:
Это пример общего противоречия между функциями, предназначенными для интерактивного использования, и функциями, с которыми можно безопасно программировать. Функция, которая использует substitute (), могла бы уменьшить набор текста, но может быть трудно вызвать другую функцию. 2
Например, если вы хотите написать функцию, которая будет использовать тот же код, но поменять W == 1
на W == 0
(или какой-то совершенно другой фильтр), NSE сделает это более трудным для выполнения.
В 2017 году Tidyverse начал строить решение этой проблемы в аккуратной оценке .