dplyr 评估:select() 与 mutate()

dplyr evaluation: select() vs. mutate()

谁能解释为什么适用于 select() 的 dplyr 方法不适用于 mutate()

最小工作示例:

data <- as.tibble(cbind(c(1,2,3,4),c(5,6,7,8)))
func <- function(data, var){
  data %>% select(!!var)
}
func2 <- function(data, var){
  data %>% mutate(!!var/10)
}

在此 MWE 中,func(data,quo(V1)) 有效。 func2(data, quo(V1))不会,它吐出Error in var/10 : non-numeric argument to binary operator。也就是说,允许 select() 将 "var" 正确评估为 "V1" 的相同策略不允许 mutate() 执行相同的操作。

是否有任何原因,是否有解决方法?

只需进行小的修复,指定新列的名称并添加方括号。

func2 <- function(data, var){ data %>% mutate(V3 = (!!var)/10) }