在带引号变量的函数中使用dplyr n_distinct

我正在尝试在函数中使用dplyr,将列名作为变量传入,然后在汇总函数中与n_distinct一起使用.

据我所知,使用dtlyr进行编程变得更容易,使用了summary(nse)中描述的summarize_,arrange_ etc函数.我也尝试过来自lazyeval的各种interp组合.带有“输入到n_distinct()的n_distinct响应必须是来自数据集的单个变量名称”(这是有意义的,它只是我在字符串中有变量名…)

这在函数外部工作正常(提到data.frame中的列名):

summarize(data, count=n_distinct(mention))

这是我的第一次努力:

getProportions <- function(datain, id_column) {
    overall_total <- summarize(datain, count=n_distinct(id_column))[1,1]
}

getProportions(measures, "mention")

在阅读了NSE文档和一些关于使用dplyr进行编程的线程之后,我尝试了:

overall_total <- summarize_(datain, count=interp(~n_distinct(var),var=as.name(id_column)))[1,1]

但无济于事.有任何想法吗?几乎看起来需要n_distinct_()?

编辑
我的道歉和感谢.你是对的,interp版本确实有效,似乎我从来没有完全击中那个完整的组合.我查看了我的旧版本,当我将var部分改为正确时,我使用了简单的summary(),当我使用summarize_()时,我离开了inter =调用的var =部分.叹.我没有用两个版本生成一个完整的工作示例.

最佳答案 正如评论中所指出的,正确的方法是我的第二个选项,显然我从未完全测试过(我留下了var = interp调用的一部分.):

f <- function(data, col) {
        summarise_(data, count = interp(~n_distinct(var), var = as.name(col)))
}
f(mtcars, "cyl")
点赞