我仍然不完全清楚如何将某些表达式传递给dplyr。
我想在mutate中使用用户定义的函数,并能够将列名称作为字符传递。我尝试使用interp {lazyeval}做了一些事情但没有成功。
请参阅下面的虚拟示例。
library(dplyr)
library(lazyeval)
# Define custom function
sumVar <- function(x, y) { x + y }
# Using bare column names (OK)
iris %>%
mutate(newVar = sumVar(Petal.Length, Petal.Width))
# Using characters for column names (does not work)
iris %>%
mutate_(newVar = sumVar('Petal.Length', 'Petal.Width'))
答案 0 :(得分:7)
我们可以尝试
library(lazyeval)
library(dplyr)
res1 <- iris %>%
mutate_(newVar= interp(~sumVar(x, y),
x= as.name("Petal.Length"),
y = as.name("Petal.Width")) )
OP的方法
res2 <- iris %>%
mutate(newVar = sumVar(Petal.Length, Petal.Width))
identical(res1, res2)
#[1] TRUE
在dplyr
的devel版本中(即将于2017年4月发布0.6.0
),也可以使用quosure
varNames <- quos(Petal.Length, Petal.Width)
res3 <- iris %>%
mutate(newVar = sumVar(!!! varNames))
quos
引用mutate
内部,我们使用!!!
unquote
list
进行评估
identical(res2, res3)
#[1] TRUE