Предположим, у меня есть следующая функция в R:
my_function <- function(date1, date2, variable, quota, monthly_business_days) {
my_data %>%
filter(between(DATE, ymd(date1), ymd(date2))) %>%
summarize(total = sum({{variable}})) %>%
add_row(total = quota, .before = 1) %>%
rbind(.$total[[2]]/bizdays(date1, date2)*monthly_business_days)
if (variable == UNITS) {
%>% mutate(indicator = c("Quota (Units)", "Sales (Units)", "Forecast (Units)"))
} else {
%>% mutate(indicator = c("Quota (USD)", "Sales (USD)", "Forecast (USD)"))
}
}
В зависимости от ввода «переменной», которые относятся к столбцам в фрейме данных «my_data», я хотел бы действовать по-разному (см. Фрагмент if/else). Однако с помощью dplyr это сделать невозможно (единственный вариант — написать все по отдельности, но я не могу позволить себе написать столько строк кода). В настоящее время я работаю в Shiny Application, пытаясь сократить количество строк кода с использованием функционального программирования.
Различные сообщения здесь, в StackOverflow, пока не дали мне ответа.
Буду очень признателен за любую помощь. Спасибо!
Попробуйте использовать следующую функцию:
library(dplyr)
my_function <- function(date1, date2, variable, quota, monthly_business_days) {
value <- deparse(substitute(variable))
my_data %>%
filter(between(DATE, ymd(date1), ymd(date2))) %>%
summarize(total = sum({{variable}})) %>%
add_row(total = quota, .before = 1) %>%
rbind(.$total[[2]]/bizdays(date1, date2)*monthly_business_days) %>%
mutate(indicator = if (value == 'UNITS') c("Quota (Units)", "Sales (Units)", "Forecast (Units)")
else c("Quota (USD)", "Sales (USD)", "Forecast (USD)"))
}
Отлично, это работает! Однако можем ли мы также включить else if?
Да, вы можете продолжить аналогично включать else if (some_condition) c("Quota (USD)", "Sales (USD)", "Forecast (USD)") else ...
Как вы называете
my_function
?