将列名称作为变量传递给函数

时间:2017-04-20 16:50:20

标签: r dplyr

我对R和dplyr库比较新。如何让函数使用变异列的名称作为函数中的参数传递?

例如,我希望“test”作为变异列的名称,但我得到“y”。我究竟做错了什么?谢谢

 library(dplyr)
    d <- data.frame(alpha=1:3, beta=4:6)
    d
    compare_status<-function(x,y){
      x %>% mutate(y=ifelse(alpha ==2,"G2","0"))
    }

    compare_status(d,test)

1 个答案:

答案 0 :(得分:2)

我们可以使用devel版本dplyr语法(即将发布0.6.0

compare_status<-function(x,y){
   y <- quo_name(enquo(y))
    x %>%
      mutate(!!y := ifelse(alpha ==2,"G2","0"))
}

compare_status(d,test)
#  alpha beta test
#1     1    4    0
#2     2    5   G2
#3     3    6    0

enquo获取输入参数并转换为quosure,然后将其转换为quo_name的字符串,并使用!!UQ不加引号进行评估作为assign(:=

的lhs上的列名