有人可以解释为什么适用于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()
正确评估&#34; var&#34; as&#34; V1&#34;,不允许mutate()
做同样的事情。
有任何理由,有什么解决方法吗?
答案 0 :(得分:1)
只需要小修复,指定新列的名称并添加括号。
func2 <- function(data, var){
data %>% mutate(V3 = (!!var)/10)
}