R: using ellipsis argument (...) R: using ellipsis argument (...) r r

R: using ellipsis argument (...)


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 argumentsmyplot(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 errormyplot2(1:3, cex=3) # works finemyplot3(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.