Duncan Murdoch <murdoch@math.aau.dk> writes:
> Tony Plate wrote:
> > I'm trying to write some functions to deal with empty actual
> > arguments that are picked up by '...' formals. Such actual
> > arguments are common (and very useful) in calls to subsetting
> > functions, e.g., x[1:2,]. It seems that R and S-PLUS treat these
> > arguments differently: in S-PLUS list(...) will return a list
> > containing just the non-empty arguments, whereas in R list(...)
> > stops with an error:
> > > # In R:
> > > f <- function(x, ...) list(...)
> > > f(1,2)
> > [[1]]
> > [1] 2
> > > f(1,2,)
> > Error in f(1, 2, ) : argument is missing, with no default
> > >
> > So it seems that quite different methods must be used in S-PLUS and
> > R to detect and process the arguments of a function that can have
> > empty arguments matched to '...'.
>
> Can you give an example where it's useful to do this, i.e. to have a
> call like f(1,2,)? I've never used that construction as far as I can
> recall.
The standard case is indexing, as Tony mentions.
The whole thing is somewhat tricky because at least some of R's semantics are deliberately different from S. E.g.
> f <- function(i) g(i)
> g <- function(i) missing(i)
> f()
[1] TRUE
Same thing in S gives FALSE. S looks at the call to g whereas R looks
at the value. This works by passing a "magic bullet" which is
implemented as the "empty name", as you can get to see by doing
something like
> f <- function(...) match.call(expand.dots=FALSE)$...
> l <- f(1,,2)
> eval(l[[2]])
Error in eval(expr, envir, enclos) : Argument is missing, with no default
> mode(l[[2]])
[1] "name"
> as.character(l[[2]])
[1] ""
One side effect of R's way of doing things is that a call to list(i,j,k) with k missing is hard to tell from list(i,j,). However, list() must be doing that somehow... I'm not sure it is a good thing, but it may have been necessary for S compatibility.
I think that what Tony was up to might be doable through variations on the match.call() scheme above.
-- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907 ______________________________________________ R-devel@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-develReceived on Sun Apr 17 00:45:25 2005
This archive was generated by hypermail 2.1.8 : Mon 24 Oct 2005 - 22:26:39 GMT