【发布时间】:2018-09-08 20:53:53
【问题描述】:
我正在尝试将多个 group_by 参数传递给 dplyr 函数以及命名变量。了解我需要使用 dplyr 的 quosure 来了解我传递给它的变量。以下代码工作正常:
quantileMaker2 <- function(data, groupCol, calcCol) {
groupCol <- enquo(groupCol)
calcCol <- enquo(calcCol)
data %>%
group_by(!! groupCol) %>%
summarise('25%' = currency(quantile(!! calcCol, probs = 0.25), digits = 2L),
'50%' = currency(quantile(!! calcCol, probs = 0.50), digits = 2L),
'75%' = currency(quantile(!! calcCol, probs = 0.75), digits = 2L),
avg = currency(mean(!! calcCol), digits = 2L),
nAgencies = n_distinct('POSIT ID'),
nFTEs = sum(FTEs)
)
}
quantileMaker2(df, employerClass, TCCperFTE)
但是,当我运行以下命令时,我遇到了问题:
quantileMaker3 <- function(data,...,calcCol) {
groupCol <- quos(...)
calcCol <- quo(calcCol)
data %>%
group_by(!!! groupCol) %>%
summarise('25%' = currency(quantile(!! calcCol, probs = 0.25), digits = 2L),
'50%' = currency(quantile(!! calcCol, probs = 0.50), digits = 2L),
'75%' = currency(quantile(!! calcCol, probs = 0.75), digits = 2L),
avg = currency(mean(!! calcCol), digits = 2L),
nAgencies = n_distinct('POSIT ID'),
nFTEs = sum(FTEs)
)
}
返回以下错误:
Error in summarise_impl(.data, dots) :
Evaluation error: anyNA() applied to non-(list or vector) of type 'symbol'.
样本数据:
Year employerClass TCCperFTE FTEs POSIT ID
2014 One 5000 20 1
2014 Two 1000 30 2
2015 One 15000 40 1
2015 Two 50000 50 2
2016 One 100000 60 1
2016 Two 500000 70 2
如果你们能提供任何帮助,我们将不胜感激。
【问题讨论】:
-
第二个版本的函数
quo应该是enquo。哪个包包含currency函数? -
您好。我将现状更改为 enquo,但仍然出现错误:summarise_impl(.data, dots) 中的错误:评估错误:anyNA() 应用于“符号”类型的非(列表或向量)。货币函数包含在 formattable 包中。
-
如果将
...放在参数列表的末尾会怎样? -
喜欢这个? quantileMaker3
-
使用
enquo并在使用函数时使用calcCol的参数名称或将...最后放在一个更简单的示例中对我有用。你能添加一个简单的示例数据集吗?您也可以尝试将示例简化为导致错误的最简单的summarise,可能只包括第一个汇总变量。