Я изо всех сил пытаюсь понять все нюансы при передаче чего-либо функции в R. Пакет rlang и то, как его использовать, сбивают меня с толку. Не могу найти хорошего руководства, когда использовать все различные rlang :: sym или связанные с ним функции.
В любом случае, я пытаюсь создать функцию, которая позволяет передавать пользовательскую функцию и связанные с ней параметры. Например, означает, квантили и т. Д. Я хочу, чтобы user_metric всегда был в кавычках, а также он должен иметь возможность содержать различные аргументы, такие как na.rm = TRUE и т. Д. Может ли кто-нибудь показать мне, как это может работать, поэтому, хочу ли я передать «среднее» или «среднее (., Na.rm = TRUE)», оба будут работать?
library(tidyverse)
group_by_metrics=function(data, group_col, user_metric){
metrics = data %>% group_by(!!rlang:sym(group_col)) %>% summarise_all(.funs = funs(!!rlang::syms(user_metric))
return(metrics)
}
group_by_metrics(data=mtcars, group_col='vs', user_metric='mean')
group_by_metrics(data=mtcars, group_col='vs', user_metric='mean(., na.rm = TRUE)'
group_by_metrics(data=mtcars, group_col='vs', user_metric ='quantile(., probs=0.95, na.rm = TRUE')