Я пытаюсь создать функцию графика с набором значений по умолчанию и возможностью изменять эти значения, используя любой аргумент, который функция plot
принимает внутри аргумента точек (...
). Пример:
PlotIt <- function(x, y, ...) {
plot(x, y, type = "l", asp = 1, ...)
}
x <- 1:10
y <- 10:1
PlotIt(x = x, y = y)
# Returns a plot
PlotIt(x = x, y = y, asp = NA)
# Error in plot.default(x, y, type = "l", asp = 1, ...) :
# formal argument "asp" matched by multiple actual arguments
Ошибка, естественно, потому что я пытаюсь дважды передать аргумент asp в plot
. Пока что моя лучшая неуклюжая попытка - сделать заявление if-else, чтобы учесть это (подход изменен с здесь ):
PlotIt2 <- function(x, y, ...) {
mc <- match.call(expand.dots = FALSE)
if(names(mc$...) %in% "asp") {
plot(x, y, type = "l", ...)
} else {
plot(x, y, type = "l", asp = 1, ...)
}
}
PlotIt2(x = x, y = y, asp = NA)
# works
Чтобы сделать это для всех возможных параметров, которые можно установить с помощью аргумента ...
, мне нужно написать длинную инструкцию if-else. Есть ли более элегантный способ сделать это?
Вопрос связан с этим , с той разницей, что я хочу автоматически перезаписать все параметры, установленные аргументом ...
.