[R] findGlobals on apply

Gabor Grothendieck ggrothendieck at gmail.com
Tue Apr 8 19:07:40 CEST 2008


Yes, based on that it seems understandable although
initially suprising.

On Tue, Apr 8, 2008 at 12:56 PM, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> On 4/8/2008 7:42 AM, Gabor Grothendieck wrote:
> > I think what he is referring to is that findGlobals lists mean under
> > variables rather than functions when you do this with his f:
> >
> >
> > > findGlobals(f, FALSE)
> > >
> > $functions
> > [1] "{"     "apply"
> >
> > $variables
> > [1] "mean"
> >
>
> Yes, I understood that, and I think it's reasonable behaviour. findGlobals
> analyzes the syntax, not the semantics.
>
> Duncan Murdoch
>
>
>
> >
> > On Tue, Apr 8, 2008 at 7:14 AM, Duncan Murdoch <murdoch at stats.uwo.ca>
> wrote:
> >
> > > Christophe Genolini wrote:
> > > >>> f <- function(x){apply(x,2,mean)}
> > > >>> findGlobals(f)
> > > >>>
> > > >> mean is a global variable, so findGlobals gets it right.
> > > >>
> > > > That sound strange to me: a "variable" is something that vary... mean
> > > > does not vary. maen will ge an argument that is a line of x and will
> > > > make some calculous on it, that is the comportement of a function.
> > > > Of course, mean is an argument of an other function, but I do not
> think
> > > > this is a reason good enouth to say that mean is a variable.
> > > >
> > >
> > > findGlobals doesn't try to tell what mean is; it's just reporting on how
> > > you've used it.  Your usage means that the interpreter will treat it as
> > > a variable, getting a copy of its value and passing it as an argument to
> > > apply.  (That's an oversimplification, of course:  it's very unlikely
> > > that an actual copy will be made, but it will act as if one was made.)
> > >
> > > > Furthemore, I use findGlobals to detect some typo. In
> > > >
> > > > f <- function(myObject){return(mObject^2)}
> > > >
> > > > findGlobals will detect that mObject is a global so I know there is a
> > > > typo somewhere.
> > > > Considering mean as a globals do not let us use findGlobals this way.
> > > >
> > > >
> > >
> > > You can still use it to detect that kind of typo, but you need a second
> > > step where you check whether the globals exist in the environment of the
> > > function or not.  That test won't be perfect either:  it will miss cases
> > > where you meant to type a local variable, but by mistake typed the name
> > > of some global.  Most uses of mean as a variable would fall into that
> > > category; unfortunately (?) apply means some of them are legitimate.
> > >
> > > I think the best you'll ever be able to do is to get some suggestions of
> > > errors, with both false positives and false negatives.  If there were
> > > cases where some usage was definitely an error, the parser would
> > > probably catch it.
> > >
> > > Duncan Murdoch
> > >
> > >
> > >
> > > > Christophe
> > > >
> > > > ______________________________________________
> > > > R-help at 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 at 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 at 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.
> >
>
>



More information about the R-help mailing list