Mario José Marques-Azevedo
2015-Dec-11 17:40 UTC
[R] Weird behaviour function args in ellipses
Dears, I'm having a weird behaviours when setting arguments in functions. fn <- function(x, st="mean", b=NULL, col.range="black", ...){ dots <- list(...) cat("col.range =", col.range, "\n") cat("dots =\n") print(dots) } fn(1, b=2,col="red") # Output col.range = red dots list() Why 'col' arguments are not in ellipses, but setting col.range to 'red'? If I change the position of ellipses fn2 <- function(x, ..., st="mean", b=NULL, col.range="black"){ dots <- list(...) cat("col.range =", col.range, "\n") cat("dots =\n") print(dots) } fn2(1, b=2, col="red") # Output col.range = black dots $col [1] "red" It works! I'm using R version 3.2.2. Best regards! Mario [[alternative HTML version deleted]]
On 11/12/2015 12:40 PM, Mario Jos? Marques-Azevedo wrote:> Dears, > > I'm having a weird behaviours when setting arguments in functions. > > fn <- function(x, st="mean", b=NULL, col.range="black", ...){ > dots <- list(...) > cat("col.range =", col.range, "\n") > cat("dots =\n") > print(dots) > } > > fn(1, b=2,col="red") > > # Output > col.range = red > dots > list() > > Why 'col' arguments are not in ellipses, but setting col.range to 'red'?See the R Language Definition manual, section 4.3.2. Partial matching is used on arguments that precede ... in the function definition, exact matching on arguments that follow it. Duncan Murdoch> > If I change the position of ellipses > > fn2 <- function(x, ..., st="mean", b=NULL, col.range="black"){ > dots <- list(...) > cat("col.range =", col.range, "\n") > cat("dots =\n") > print(dots) > } > > fn2(1, b=2, col="red") > > # Output > col.range = black > dots > $col > [1] "red" > > It works! I'm using R version 3.2.2. > > Best regards! > > Mario > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
> On Dec 11, 2015, at 9:40 AM, Mario Jos? Marques-Azevedo <mariojmaaz at gmail.com> wrote: > > Dears, > > I'm having a weird behaviours when setting arguments in functions. > > fn <- function(x, st="mean", b=NULL, col.range="black", ...){ > dots <- list(...) > cat("col.range =", col.range, "\n") > cat("dots =\n") > print(dots) > } > > fn(1, b=2,col="red") > > # Output > col.range = redArgument matching is done with `pmatch`. So "col" is a partial match to "col.range". See ?match.arg> dots > list() > > Why 'col' arguments are not in ellipses, but setting col.range to 'red'? > > If I change the position of ellipses > > fn2 <- function(x, ..., st="mean", b=NULL, col.range="black"){ > dots <- list(...) > cat("col.range =", col.range, "\n") > cat("dots =\n") > print(dots) > } > > fn2(1, b=2, col="red") > > # Output > col.range = black > dots > $col > [1] "red" > > It works! I'm using R version 3.2.2.It's been that way 'forever'.> > Best regards! > > Mario > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.David Winsemius Alameda, CA, USA
Mario José Marques-Azevedo
2015-Dec-11 18:52 UTC
[R] Weird behaviour function args in ellipses
Hi Duncan and David, Thank you for explanation. I'm really disappointed with this R "resource". I think that partial match, mainly in function args, must be optional and not default. We can have many problems and lost hours find errors (it occur with me). I tried to find a solution to disable partial match, but it seems that is not possible. Program with hacks for this will be sad. Best regards! Mario On 11 December 2015 at 15:55, David Winsemius <dwinsemius at comcast.net> wrote:> > > On Dec 11, 2015, at 9:40 AM, Mario Jos? Marques-Azevedo < > mariojmaaz at gmail.com> wrote: > > > > Dears, > > > > I'm having a weird behaviours when setting arguments in functions. > > > > fn <- function(x, st="mean", b=NULL, col.range="black", ...){ > > dots <- list(...) > > cat("col.range =", col.range, "\n") > > cat("dots =\n") > > print(dots) > > } > > > > fn(1, b=2,col="red") > > > > # Output > > col.range = red > > Argument matching is done with `pmatch`. So "col" is a partial match to > "col.range". > > See ?match.arg > > > > dots > > list() > > > > Why 'col' arguments are not in ellipses, but setting col.range to 'red'? > > > > If I change the position of ellipses > > > > fn2 <- function(x, ..., st="mean", b=NULL, col.range="black"){ > > dots <- list(...) > > cat("col.range =", col.range, "\n") > > cat("dots =\n") > > print(dots) > > } > > > > fn2(1, b=2, col="red") > > > > # Output > > col.range = black > > dots > > $col > > [1] "red" > > > > It works! I'm using R version 3.2.2. > > It's been that way 'forever'. > > > > > Best regards! > > > > Mario > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. > > David Winsemius > Alameda, CA, USA > >[[alternative HTML version deleted]]