我一直在寻找有关将参数传递给自定义函数中的dplyr函数的帖子,但我无法解决以下情况:
我创建了以下函数来获取数据帧的子集。
library(Lahman)
top_leaders <- function(df, metric, n) {
# metric is the name of the column of Batting df which I would like to analyze
# n is the number of top players leaders on that metric
stat_leader <- enquo(metric)
df %>%
dplyr::select(playerID, !!stat_leader) %>%
dplyr::top_n(n)
}
由于该功能很好用,因此可以将n个玩家领导者替换为该属性。例如:
> top_leaders(Lahman::Batting, "R", 5)
Selecting by R
playerID R
1 oneilti01 167
2 brownto01 177
3 hamilbi01 198
4 ruthba01 177
5 gehrilo01 167
尽管如此,我还是希望对结果进行排序,所以我使用了arrange
函数来根据统计信息对结果进行排序。
top_leaders <- function(df, metric, n) {
stat_leader <- enquo(metric)
df %>%
dplyr::select(playerID, !!stat_leader) %>%
dplyr::top_n(n) %>%
dplyr::arrange(desc(!!stat_leader))
}
但是会出现以下错误:
Selecting by R
Error: incorrect size (1) at position 1, expecting : 5
我稍后尝试使用arrange_(desc(!!stat_leader))
并得到另一个错误:
Selecting by R
Error: Quosures can only be unquoted within a quasiquotation context.
# Bad:
list(!!myquosure)
# Good:
dplyr::mutate(data, !!myquosure)
所以我对如何解决这个问题没有想法。
答案 0 :(得分:2)
利用Rlang's new curly-curly notation:
top_leaders <- function(df, playerID, metric, n) {
df %>%
dplyr::select({{playerID}}, {{metric}}) %>%
dplyr::top_n(n) %>%
dplyr::arrange(desc({{metric}})) %>%
return(.)
}
top_leaders(as_tibble(Lahman::Batting), playerID, R, 5)
#Selecting by R
## A tibble: 5 x 2
# playerID R
# <chr> <int>
#1 hamilbi01 198
#2 brownto01 177
#3 ruthba01 177
#4 oneilti01 167
#5 gehrilo01 167
您也需要将playerID传递给该函数,但这只是一个很小的改动。
答案 1 :(得分:1)
我们在传递字符串时可能需要在此处转换为SaveConfigFinalSemana: function($event) {
console.log($event.srcEvent.target);
console.log($event.srcEvent.target.name);
}
bol。
sym
如果我们传递未加引号的变量名,它也将起作用
top_leaders <- function(df, metric, n) {
stat_leader <- ensym(metric)
df %>%
dplyr::select(playerID, !!stat_leader) %>%
dplyr::top_n(n) %>%
dplyr::arrange(desc(!!stat_leader))
}
top_leaders(Lahman::Batting, "R", 5)
#Selecting by R
# playerID R
#1 hamilbi01 198
#2 brownto01 177
#3 ruthba01 177
#4 oneilti01 167
#5 gehrilo01 167
使用OP的功能,它只希望使用不带引号的参数而不是带引号的