Hi,

Strange things happen with missing args in S4 methods:

  > setGeneric("mygen", signature="x", function(x, ...) 
standardGeneric("mygen"))
  [1] "mygen"

  > setMethod("mygen", "character", function(x, y=12, z, ...) {cat(missing(y), 
"\n"); cat(y, "\n")})
  [1] "mygen"

  > mygen("aa", z=99)
  TRUE
  12

  > mygen("aa", , 99)
  TRUE
  Error in cat(y, "\n") : argument is missing, with no default
                                      ^^^^^^^       ^^^^^^^^^^
                                       TRUE          NOT TRUE!


For "normal" functions, things work as expected:

  > myfun <- function(x, y=12, z, ...) {cat(missing(y), "\n"); cat(y, "\n")}

  > myfun("aa", z=99)
  TRUE
  12

  > myfun("aa", , 99)
  TRUE
  12

And with S3 generics too:

  > dd <- data.frame(aa=letters[1:9], ii=9:1)
  > head(dd, z="ignored")
    aa ii
  1  a  9
  2  b  8
  3  c  7
  4  d  6
  5  e  5
  6  f  4

  > head(dd, , "ignored")
    aa ii
  1  a  9
  2  b  8
  3  c  7
  4  d  6
  5  e  5
  6  f  4

Cheers,
H.

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to