Я пишу пользовательскую функцию, которая строит сглаживающую линию и отображает субтитры в виде «линейной модели», только когда все параметры geom_smooth
являются линейными (т. Е. method = "lm"
и formula = y ~ x
).Это включает проверку того, что пользователь вводит для этих двух аргументов.Сложный аспект проверки ввода состоит в том, что аргумент method
можно вводить либо в виде символа ("lm"
), либо в виде функции (MASS::rlm
), и в этом случае функция завершается ошибкой.
Какможно заставить это работать?
Вот это reprex
:
# for reproducibility
set.seed(123)
library(tidyverse)
library(mgcv)
# defining a function to plot smooth line
scatter_lm <- function(df, x, y, formula = y ~ x, method = "lm") {
if (as.character(deparse(formula)) != "y ~ x" ||
!any(method %in% c("lm", stats::lm))) {
subtitle <- "non-linear model"
} else {
subtitle <- "linear model"
}
# creating the plot
ggplot(df, aes(!!rlang::enquo(x), !!rlang::enquo(y))) +
geom_smooth(formula = formula, method = method) +
labs(subtitle = subtitle)
}
# different `formula` (works)
scatter_lm(mtcars, wt, mpg, y ~ log(x))
![](https://i.imgur.com/JOgV3vn.png)
# `method` entered as a character (works)
scatter_lm(mtcars, wt, mpg, y ~ x, "gam")
![](https://i.imgur.com/0xV4iYe.png)
# `method` entered as a function (doesn't work)
scatter_lm(mtcars, wt, mpg, y ~ x, MASS::rlm)
#> Error in match(x, table, nomatch = 0L): 'match' requires vector arguments
Создано в 2019-05-30 пакетом Представления (v0.3.0)