什么时候需要 enquo() 和 as_label()?

When are enquo() and as_label() required?

Tidy Evaluation 中的示例表明,为了在赋值的 LHS 上使用变量,我们必须使用 as_label() 和 enquo()。

但是,我发现以下内容似乎工作正常:

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

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

  return( ts2 )
}

我不太明白 as_label() 和 enquo() 的作用,以及何时需要它们。

除了支持取消引用(现在支持粘合字符串),:= 的 LHS 与 = 的工作方式相同:它需要符号或字符串。

没有使用enquo()的要求,您可以在:=的LHS上取消引用任何字符串。

当你在函数参数上使用 enquo() 时,结果可以是任何类型的 R 对象。它通常是一个符号或一个电话,但也可以是一个数字或字符串,如 1"foo"。如果用户调用 !! 它真的可以是任何东西。在这种情况下,如果您需要一个字符串来表示您捕获的这个参数并且可以是任何东西,您可以使用 as_label()。它对任何 R 对象都有很好的定义,并保证 return 一个表示对象信息的字符串。