When are enquo() and as_label() required?

289 Views Asked by At

In Tidy Evaluation the examples show that, in order to use a variable on the LHS of an assignment, we have to use as_label() and enquo().

Yet, I'm finding that the following seems to work ok:

addSma = function( data, period ) {  
  colName = paste0("smaCl_", period)

  ts2 = data %>%
    dplyr::mutate( !!colName := SMA(close, n=period ) )

  return( ts2 )
}

I'm failing to understand quite what as_label() and enquo() do, and when they are actually required.

1

There are 1 best solutions below

2
On BEST ANSWER

Besides support for unquoting (and now for glue strings), the LHS of := works the same way as =: it expects symbols or strings.

There is no requirement to use enquo(), you can unquote any string on the LHS of :=.

When you do use enquo() on a function argument, the result can be any sort of R object. It is usually a symbol or a call, but it can also be a number or a string like 1 or "foo". And if the user called !! it really could be anything. In this case, if you need a string to represent this argument that you've captured and which could be anything, you can use as_label(). It is well defined for any R objects and is guaranteed to return a single string representing the object informatively.