2015-12-28 38 views
1

我浏览过其他问题,并且知道在大多数情况下,我可以直接将字段名称作为字符串传递,然后使用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 
} 
+0

看看这个http://stackoverflow.com/questions/30108105/dplyr-standard-evaluation-for-mutate -with-quoted-variable-names – MLavoie

回答

2

我相信这个工程,并使用interplazyeval

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 
+0

谢谢!这很好。后续问题(为了更好地理解interp是如何工作的 - 我怎样才能为其添加另一列,以便函数现在需要两个列名?(添加上面的格式问题) – pomegranate

+0

@pomegranate您的附加问题不会产生太多这种方法的工作原理是不同的,如果你在文档中读到非标准的评估小插件,你会看到'quote''','''',''只是其中一个选项,我选择它是因为在这种情况下它看起来最简单,因为你正在调用另一个函数。 – joran

相关问题