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)
}
谁能解释为什么适用于 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)
}