2015-12-28 39 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

相關問題