将列名称作为参数传递给管道语句

时间:2015-12-28 19:32:52

标签: r

我浏览了其他问题,并且知道在大多数情况下,我可以直接将列名作为字符串传递,然后使用d [,column]来访问值。但是,我无法在使用管道语句的函数中使用它(该函数使用给定的列并将值舍入到最接近的20):

fun = function(mydata, column) {
   new = mydata %>%
       mutate(time = plyr::round_any(column,                  #also tried mydata[,column]
                              20, f = floor))
   return(new)
}

有关如何执行此操作的任何建议吗?

参考下面的joran答案:我如何能够在保持不变的列名之间添加作为参数传递的列名?引用有什么功能?

E.g。

fun2 = function(d, column, column2) {
    d %>%
    mutate_(time = interp(quote(plyr::round_any(var,20,f = floor)),
                                            var = as.name(column))) %>%
    count_(CONSTANT_COL_NAME, interp(var, var=as.name(column2)), CONSTANT_COL_NAME2) #Line in question
}

1 个答案:

答案 0 :(得分:2)

我相信这可以使用 lazyeval 中的interp

library(dplyr)
library(lazyeval)

d <- data.frame(x = rnorm(10,300,20))
column <- "x"
> d %>%
    mutate_(time = interp(quote(plyr::round_any(var,20,f = floor)),
                                                var = as.name(column)))

          x time
1  299.8697  280
2  271.5919  260
3  298.2845  280
4  276.3756  260
5  312.3145  300
6  289.7780  280
7  305.9819  300
8  290.5856  280
9  306.8417  300
10 336.2645  320