R: using ellipsis argument (…)

后端 未结 1 1842
醉梦人生
醉梦人生 2021-01-11 14:41

I want to create a wrapper function replacing some of the default arguments.

Here the core of the problem I\'m struggling with:

Error in localWindow(         


        
相关标签:
1条回答
  • 2021-01-11 15:34

    AN ACTUAL ANSWER:

    You can do this through a bit of trickery. First, define your function as before, but include a list with your default arguments inside the function. Then you can parse whatever arguments come in through ... as a list, replace the defaults with anything in ... and then pass the updated list of arguments through do.call.

    myplot <- function(x, ...) {
        args1 <- list(cex=4, main="Default Title") # specify defaults here
        inargs <- list(...)
        args1[names(inargs)] <- inargs
        do.call(plot, c(list(x=x), args1))
    }
    
    myplot(x=1:3) # call with default arguments
    myplot(x=1:3, cex=2, main="Replacement", xlab="Test xlab") # call with optional arguments
    

    EARLIER COMMENTARY:

    The problem here can be seen through a few example functions:

    myplot1 <- function(x, ... ) {
        plot(x, cex= 1.5, ... )
    }
    
    myplot2 <- function(x, cex=3, ... ) {
        plot(x, cex=cex, ... )
    }
    
    myplot3 <- function(x, ... ) {
        plot(x, ... )
    }
    
    myplot1(1:3, cex=3) # spits your error
    myplot2(1:3, cex=3) # works fine
    myplot3(1:3, cex=3) # works fine
    

    In myplot2, you specify a default value of cex but can change it. In myplot3, cex is simply passed through. If you run myplot2 with two cex arguments, you'll see what's happening with your function (myplot1):

    myplot2(1:3, cex=3, cex=1.5) # same error as above
    

    So, you're probably best to avoid setting any defaults in plot(), so then you can pass anything through the ... in myplot.

    0 讨论(0)
提交回复
热议问题