R 将椭圆(…)中的参数发送到不同的目标

R 将椭圆(…)中的参数发送到不同的目标,r,R,有时我需要允许用户通过。。。在某些情况下,这些可选参数用于plot(),有时用于在我的函数中调用的其他函数。我编写了以下函数,该函数将参数分为与plot()匹配的参数和与之不匹配的参数: dotsForPlots <- function(..., plot = TRUE) { dots <- list(...) dotnames <- names(dots) dfp <- names(par()) # dfp = dots for plots

有时我需要允许用户通过。。。在某些情况下,这些可选参数用于
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])
}
产生所需的输出

现在问题是:

  • 有没有一种内在的方法可以做到这一点/我是不是重新发明了方向盘?好像有,但我找不到

  • 第二个函数中是否有比
    do.call方法更简单的选项?我在想一种方法,可以用某种方式强制
    dfp
    ,我可以用
    plot(x,y,“修改的dfp”)


  • 你可能会从这里得到一些想法@RichardScriven谢谢,我会研究这个答案,我错过了。
    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")