title: Why is enquo + !! preferable to substitute + eval
body: <p>In the following example, why should we favour using <code>f1</code> over <code>f2</code>? Is it more efficient in some sense? For someone used to base R, it seems more natural to use the "substitute + eval" option.</p>
  
  <pre><code>library(dplyr)
  
  d = data.frame(x = 1:5,
                 y = rnorm(5))
  
  # using enquo + !!
  f1 = function(mydata, myvar) {
    m = enquo(myvar)
    mydata %&gt;%
      mutate(two_y = 2 * !!m)
  }
  
  # using substitute + eval    
  f2 = function(mydata, myvar) {
    m = substitute(myvar)
    mydata %&gt;%
      mutate(two_y = 2 * eval(m))
  }
  
  all.equal(d %&gt;% f1(y), d %&gt;% f2(y)) # TRUE
  </code></pre>
  
  <p>In other words, and beyond this particular example, my question is: can I get get away with programming using <code>dplyr</code> NSE functions with good ol' base R like substitute+eval, or do I really need to learn to love all those <code>rlang</code> functions because there is a benefit to it (speed, clarity, compositionality,...)?</p>