变异的Dplyr编程模式

时间:2017-09-12 20:06:57

标签: r nse

在函数内部使用dplyr mutate时,我一直在使用标准模式。这是一个玩具示例(仅用于证明一点):

myFunction = function(colname) {
    dots <- setNames(list(lazyeval::interp(~ifelse(x>25, x*10, x/10), x = quote(colname))), "my_new_col")
    mutate_(mtcars, .dots = dots)
}

我已经把它变成了一个不每次都输入它的功能。但这是相当冗长的,我不确定是否有更简单的方法来参数化对mutate_的调用。建议?

1 个答案:

答案 0 :(得分:0)

我假设您的函数正在尝试基于现有列创建新列。以下是使用tidyeval方法的函数。有关详细信息,请参阅Programming with dplyr

myFunction = function(df, col, new_col) {
    col <- enquo(col)
    new_col <- quo_name(enquo(new_col))

    df %>% 
        mutate(!!new_col := ifelse((!!col) > 25, (!!col) * 10, (!!col) / 10))
}

myFunction(mtcars, mpg, mpg_based_new_col)