Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在带引号变量的函数中使用dplyr n_distinct_R_Dplyr - Fatal编程技术网

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

在带引号变量的函数中使用dplyr n_distinct,r,dplyr,R,Dplyr,我试图在函数中使用dplyr,将列名作为变量传入,然后在summary函数中与n_distinct一起使用 我知道使用dplyr编程变得更容易了,如vignette(nse)中所述,使用Summary、arrange等功能。我也尝试过lazyeval的各种interp组合。n_distinct响应带有“n_distinct()的输入必须是数据集中的单个变量名”(这很有意义,只是变量名在字符串中…) 这在函数外部可以正常工作(提到的是data.frame中的列名): 这是我的第一次努力: getP

我试图在函数中使用dplyr,将列名作为变量传入,然后在summary函数中与n_distinct一起使用

我知道使用dplyr编程变得更容易了,如vignette(nse)中所述,使用Summary、arrange等功能。我也尝试过lazyeval的各种interp组合。n_distinct响应带有“n_distinct()的输入必须是数据集中的单个变量名”(这很有意义,只是变量名在字符串中…)

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

这是我的第一次努力:

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

getProportions(measures, "mention")

getPirations正如评论中所指出的,正确的方法是我的第二个选项,显然我从未完全测试过它(我在var的左边=interp调用的一部分):


f我不确定问题出在哪里,因为这对我有效:
f再次感谢(我编辑了答案)。这不是问题;我应该删除它吗?您可以删除它,或者自己回答并接受它,因为其他人可能会发现它在将来很有用。我需要限定interp函数的名称空间,以使其工作,即lazyeval::interp确实也为我工作。但是我发现在任何dplyr计算中,
length(unique(col))
n_distinct(col)
快得多。不知道为什么。
getProportions <- function(datain, id_column) {
    overall_total <- summarize(datain, count=n_distinct(id_column))[1,1]
}

getProportions(measures, "mention")
overall_total <- summarize_(datain, count=interp(~n_distinct(var),var=as.name(id_column)))[1,1]
f <- function(data, col) {
        summarise_(data, count = interp(~n_distinct(var), var = as.name(col)))
}
f(mtcars, "cyl")