将 dplyr quosures 与 mutate() 结合使用
Using dplyr quosures with mutate()
阅读 Programming with dplyr 指南时,出现意外错误。
事实上,使用 summarize
尝试示例工作得很好,但如果我使用 mutate
尝试类似的事情,代码将不会 运行。
这是我的代码:
df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467))
df %>%
mutate(x = A-B) %>%
pull(x)
#returns the good output :
#[1] 452 3450 -937 3380 290 8 190
get.diff = function(var1, var2, data=df){
var1 = enquo(var1)
var2 = enquo(var2)
data %>%
mutate(x = (!!var1 - !!var2)) %>%
pull(x)
}
get.diff(A, B)
returns an error
这是错误:
Error in !var2 : invalid argument type
我尝试了很多方法,但这是我最接近指南示例的方法。
我错过了什么?
您只需要在每个 "bang bang" / 取消引号 (!!varX
) 周围加上括号:
mutate(x = ((!!var1) - (!!var2))) %>%
完整代码:
df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467))
df %>%
dplyr::mutate(x = A-B) %>%
pull(x)
#returns the good output :
#[1] 452 3450 -937 3380 290 8 190
get.diff = function(var1, var2, data=df){
var1 = enquo(var1)
var2 = enquo(var2)
data %>%
dplyr::mutate(x = ((!!var1) - (!!var2))) %>%
pull(x)
}
get.diff(A, B)
[1] 452 3450 -937 3380 290 8 190
阅读 Programming with dplyr 指南时,出现意外错误。
事实上,使用 summarize
尝试示例工作得很好,但如果我使用 mutate
尝试类似的事情,代码将不会 运行。
这是我的代码:
df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467))
df %>%
mutate(x = A-B) %>%
pull(x)
#returns the good output :
#[1] 452 3450 -937 3380 290 8 190
get.diff = function(var1, var2, data=df){
var1 = enquo(var1)
var2 = enquo(var2)
data %>%
mutate(x = (!!var1 - !!var2)) %>%
pull(x)
}
get.diff(A, B)
returns an error
这是错误:
Error in !var2 : invalid argument type
我尝试了很多方法,但这是我最接近指南示例的方法。
我错过了什么?
您只需要在每个 "bang bang" / 取消引号 (!!varX
) 周围加上括号:
mutate(x = ((!!var1) - (!!var2))) %>%
完整代码:
df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467))
df %>%
dplyr::mutate(x = A-B) %>%
pull(x)
#returns the good output :
#[1] 452 3450 -937 3380 290 8 190
get.diff = function(var1, var2, data=df){
var1 = enquo(var1)
var2 = enquo(var2)
data %>%
dplyr::mutate(x = ((!!var1) - (!!var2))) %>%
pull(x)
}
get.diff(A, B)
[1] 452 3450 -937 3380 290 8 190