dplyr mutate、自定义函数和变量名作为字符

dplyr mutate、自定义函数和变量名作为字符,r,dplyr,R,Dplyr,我还不完全清楚如何将某些表达式传递给dplyr 我希望在mutate中使用一个用户定义的函数,并能够将列名作为字符传递给它。我在interp{lazyeval}上尝试了几件事,但没有成功 请参见下面的虚拟示例 library(dplyr) library(lazyeval) # Define custom function sumVar <- function(x, y) { x + y } # Using bare column names (OK) iris %>% mu

我还不完全清楚如何将某些表达式传递给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'))
库(dplyr)
图书馆(懒汉)
#定义自定义函数
苏姆瓦尔%
变异(newVar=sumVar(花瓣长、花瓣宽))
#使用字符作为列名(不起作用)
虹膜%>%
变异(newVar=sumVar('Petal.Length','Petal.Width'))
我们可以试试

library(lazyeval)
library(dplyr)
res1 <- iris %>% 
           mutate_(newVar= interp(~sumVar(x, y),
                x= as.name("Petal.Length"), 
                y = as.name("Petal.Width")) )
quos
正在引用,在
mutate
中,我们使用
取消报价
a
列表
进行评估

identical(res2, res3)
#[1] TRUE

谢谢你。尽管我意识到我的问题相对于我的实际问题简化了一点。我刚刚编辑了这个问题,以便更好地反映问题的复杂性。OK,我恢复了编辑,并将打开一个新问题
varNames <- quos(Petal.Length,  Petal.Width)
res3 <- iris %>%
            mutate(newVar = sumVar(!!! varNames))
identical(res2, res3)
#[1] TRUE