我不时需要允许用户通过...添加可选参数。在某些情况下,这些可选参数用于plot()
,有时它们用于我函数中调用的其他函数。我编写了以下函数,将参数分类为plot()
和不符合的参数:
dotsForPlots <- function(..., plot = TRUE) {
dots <- list(...)
dotnames <- names(dots)
dfp <- names(par()) # dfp = dots for plots
# add select args for plot.default
dfp <- c(dfp, "main", "xlim", "ylim", "xlab", "ylab", "type")
if (plot) pass <- which(dotnames %in% dfp)
if (!plot) pass <- which(!dotnames %in% dfp)
return(dots[pass])
}
这很好用:
tst <- dotsForPlots(cex = 2, noise = 5, junk = "hello",
lty = 3, plot = TRUE, main = "Test Plot")
str(tst)
这是一个使用它的函数:
foo <- function(x, y, ...) {
dnp <- dotsForPlots(..., plot = FALSE) # to go to jitter
dnp$x <- y # has to match eventual function call
y <- do.call(jitter, args = dnp)
dfp <- dotsForPlots(...) # to go to plot
dfp$x <- x
dfp$y <- y
do.call(plot, dfp)
}
运行它
foo(x = 1:10, y = 1:10, cex = 2, lty = 2, factor = 10,
main = "Hello", ylab = "", type = "b")
产生所需的输出。
现在问题:
有没有内置的方法来做这个/我刚刚重新发明轮子?似乎可能有,但我找不到它。
第二个功能是否比do.call
方法更简单?我正在考虑一些允许我以某种方式强迫dfp
强迫我使用plot(x, y, "modified dfp")
的话。