Gabor Grothendieck wrote: > This comes from the all.vars function and would indicate > a bug in that base R function. > >
hush! a user bug, i presume? but indeed, all.vars(expression(foo(bar)())) # character(0) all.names(expression(foo(bar)())) # "foo" "bar" vQ >> f = function(a) function() paste(a, a, sep="") >> all.vars(~ fo(o)()) >> > character(0) > > > On Tue, Feb 3, 2009 at 8:24 AM, Wacek Kusnierczyk > <waclaw.marcin.kusnierc...@idi.ntnu.no> wrote: > >> Peter Dalgaard wrote: >> >>> Gabor Grothendieck wrote: >>> >>>> On Sat, Jan 31, 2009 at 6:01 PM, Wacek Kusnierczyk >>>> >>> th some additional boring pedantry wrt. ?gsubfn, which says: >>> >>>>> " If 'replacement' is a formula instead of a function then a one >>>>> line function is created whose body is the right hand side of the >>>>> formula and whose arguments are the left hand side separated by >>>>> '+' signs (or any other valid operator). The environment of the >>>>> function is the environment of the formula. If the arguments are >>>>> omitted then the free variables found on the right hand side are >>>>> used in the order encountered. " >>>>> >>>>> to my little mind, all of 'paste', 'rep', 'nchar', and 'x' in the >>>>> example above are *free variables* on the right of the formula. you >>>>> >>>> The first three are functions, not variables. >>>> >>> They are still free variables, subject to the same rules of variable >>> lookup. Wacek is right: The RHS is scanned recursively for objects of >>> mode "name" _except_ when they appear as function names (i.e. if >>> subexpression e is mode "call", then forget e[[1]] and look at the >>> arguments in as.list(e)[-1]. Not sure if this also happens if e[[1]] >>> is not a name, e.g. in f(a)(b), do you get both a and b or just b?) >>> >>> >> an interesting point. the two calls to gsubfn below should, in this >> particular case, be equivalent: >> >> library(gsubfn) >> >> f = function(a) function(b) paste(a, b, sep="") >> gsubfn('o', ~ f('o')(o), 'foo') >> # "foooo" >> gsubfn('o', ~ f(o)('o'), 'foo') >> # the match seems to be ignored in the formula? >> the following fails, too: >> >> f = function(a) function() paste(a, a, sep="") >> gsubfn('o', ~ f(o)(), 'foo') >> # o won't capture the match >> >> this as well, though it's rather different: >> >> f = function() 'oo' >> gsubfn('o', ~ f(), 'foo') >> # really can't ignore the matched pattern if a formula is given? >> >> >> while an average statistician may never write such rubbish code, these >> are trivialized examples, and for a language advertised as one from the >> functional family this sort of code is not so unusual and it may be >> surprising that it fails. >> > > Can you clarify this. In what way was the "match ignored"? > In the first case it added an o after each o. Were you expecting > something different? > > ______________________________________________ > 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. ______________________________________________ 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.