Wacek Kusnierczyk wrote:


(a) do not descend recursively into the function part (first element)
of a call
(b) do descend, unless it is a name

if it is a name, how would you descend?

By calling a recursive function which has it as the argument. It's not a problem unless you want it to be (first you descend into the first element on a call, then realize that it is a name). There are essentially three possibilities (cutting some red tape):

> f <- function(e) if (is.name(e))
  print(e) else if(is.call(e)) invisible(lapply(e,f))
> f(~ fo(o)())
`~`
fo
o


> f <- function(e) if (is.name(e))
 print(e) else if(is.call(e)) invisible(lapply(e[-1],f))
> f(~ fo(o)())


> f <- function(e) if (is.name(e)) print(e) else
        if(is.call(e)) invisible( if(is.name(e[[1]]))
             lapply(e[-1],f) else lapply(e,f))
> f(~ fo(o)())
o


The first two are essentially the current all.names and all.vars. The third is the one that you seem to expect. Notice that it gets rather more complicated than the others.

 > one legitimate reason is to keep the syntax/semantics clean (worship the
god of boring pedantry). be this not enough, a practical example could certainly be found, though admittedly the above were made up for the discussion.

But can you be sure that there is no legitimate reason for expecting the current behaviour?

--
   O__  ---- Peter Dalgaard             Ă˜ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalga...@biostat.ku.dk)              FAX: (+45) 35327907

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to