As the article "Tidy Evaluation"[1] says<p>"R makes it easy to create DSLs thanks to three features of the language:<p>* R code is first-class. That is, R code can be manipulated like any other object (see sym(), lang() and node() for creating such objects). We also call expressions these objects containing R code (see is_expr()).<p>* Scope is first-class. Scope is the lexical environment that associates values to symbols in expressions. Environments can be created (see env()) and manipulated as regular objects.<p>* Finally, functions can capture the expressions that were supplied as arguments instead of being passed the value of these expressions (see enquo() and enexpr()).
"<p>dplyr is a testament to how these nonstandard features of R can be combined to produce a language for interactive data analysis whose convenience and clarity cannot be matched by traditional languages.<p>[1] <a href="http://rlang.tidyverse.org/articles/tidy-evaluation.html" rel="nofollow">http://rlang.tidyverse.org/articles/tidy-evaluation.html</a>