dplyr mutate、自定义函数和变量名作为字符
我还不完全清楚如何将某些表达式传递给dplyr 我希望在mutate中使用一个用户定义的函数,并能够将列名作为字符传递给它。我在interp{lazyeval}上尝试了几件事,但没有成功 请参见下面的虚拟示例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
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