2015-10-27 19 views
1

我已經在這裏查看了StackOverflow的答案,但我想我可能會錯過一個術語。這裏的場景:通過將文本傳遞給函數來簡化R中的可重複代碼以用作參數

我有一個大型的數據集,我想報告多個組。假設這個數據集以列的形式回答了某些問題,並且我想要採取特定的專欄和迴應,對答案進行分組並且執行計數。從本質上講,我有一個dplyr過濾表達式應該是這樣的:

z <- results %>% filter(AgeGroup %in% c("16-20", "21-25", "26-30")) %>% 
    group_by(AgeGroup) %>% summarize(ageCount=n()) 

然後我生成結果的表使用xtable()和我Rmarkdown文件中把它們扔掉。我想要做的就是創建一個能做到這一點的函數,這樣我可以做以下

resultPrint <- function(qualifier, groupColumn) { 
    return(results %>% filter(qualifier) %>% 
     group_by(groupColumn) %>% summarize(count=n()) 
} 

resultPrint("AgeGroup %in% c(\"16-20\", \"21-25\", \"26-30\")", "AgeGroup") 

或者一些等價的。

有沒有辦法在R中做到這一點?如果可以的話,它會簡化我寫的很多代碼。謝謝!

+2

我認爲你正在尋找[NSE(非標準評估)](http://adv-r.had.co.nz/Computing-on-the-language.html),也許在'?filter_ '(注意下劃線)。查看[dplyr Use Cases:Non-interactive Mode](http://www.r-bloggers.com/dplyr-use-cases-non-interactive-mode/)瞭解更多想法。 – r2evans

回答

1

謝謝r2evans!這是我的解決方案:

resultPrint <- function(qualifier, groupColumn) { 
    return(results %>% filter_(qualifier) %>% 
      group_by_(.dots = groupColumn) %>% summarize(count=n())) 
} 

filterClause = quote(AgeGroup %in% c("16-20", "21-25", "26-30")) 
stuff <- resultPrint(filterClause, quote(AgeGroup)) 

謝謝!

相關問題