将椭圆(...)中的args发送到不同的目的地

时间:2016-01-23 01:27:21

标签: r

我不时需要允许用户通过...添加可选参数。在某些情况下,这些可选参数用于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")

产生所需的输出。

现在问题:

  1. 有没有内置的方法来做这个/我刚刚重新发明轮子?似乎可能有,但我找不到它。

  2. 第二个功能是否比do.call方法更简单?我正在考虑一些允许我以某种方式强迫dfp强迫我使用plot(x, y, "modified dfp")的话。

0 个答案:

没有答案