[R] Ellipsis arguments for plot.formula

Amit Ganatra amit_d_ganatra at yahoo.com
Fri Jul 11 18:09:15 CEST 2008


Perfect, thank you. 


--- On Fri, 7/11/08, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:

> From: Gabor Grothendieck <ggrothendieck at gmail.com>
> Subject: Re: [R] Ellipsis arguments for plot.formula
> To: amit_d_ganatra at yahoo.com
> Cc: r-help at r-project.org
> Date: Friday, July 11, 2008, 9:45 AM
> You could replace the one line in my.plot with this:
> 
> eval.parent(substitute(plot( x, y, cex.axis=0.5, ...)))
> 
> 
> On Fri, Jul 11, 2008 at 10:41 AM, Amit Ganatra
> <amit_d_ganatra at yahoo.com> wrote:
> >
> > Thank you. That does work for the title.
> > My intention for the program I am writing was to set
> some parameters with default values that I wanted. Then
> each call would set other parameters as required.
> > It all works fine apart from the calls where I pass a
> formula. It probably has to do with the data argument of
> plot.formula. plot.formula is probably trying to find all
> the names in that argument and not just the names that
> appear in the formula.
> >
> >
> > --- On Fri, 7/11/08, Gabor Grothendieck
> <ggrothendieck at gmail.com> wrote:
> >
> >> From: Gabor Grothendieck
> <ggrothendieck at gmail.com>
> >> Subject: Re: [R] Ellipsis arguments for
> plot.formula
> >> To: amit_d_ganatra at yahoo.com
> >> Cc: "Bert Gunter"
> <gunter.berton at gene.com>, r-help at r-project.org
> >> Date: Friday, July 11, 2008, 8:31 AM
> >> A workaround is to use the title command instead:
> >>
> >> my.plot(y ~ x, tdf)
> >> title(main.str)
> >>
> >>
> >> On Fri, Jul 11, 2008 at 8:43 AM, Amit Ganatra
> >> <amit_d_ganatra at yahoo.com> wrote:
> >> > Thank you for taking the time.
> >> > I get your point about presumptions.
> >> > If you issue the call my.plot( x, y, main =
> main.str
> >> ), it works fine. The problem turns up only when
> you use a
> >> formula as an argument, hence the suspicion that
> the
> >> behavior was unintended.
> >> >
> >> >
> >> > --- On Thu, 7/10/08, Bert Gunter
> >> <gunter.berton at gene.com> wrote:
> >> >
> >> >> From: Bert Gunter
> <gunter.berton at gene.com>
> >> >> Subject: RE: [R] Ellipsis arguments for
> >> plot.formula
> >> >> To: amit_d_ganatra at yahoo.com
> >> >> Cc: r-help at r-project.org
> >> >> Date: Thursday, July 10, 2008, 5:10 PM
> >> >> I think it's rather presumptuous of
> you to ask
> >> whether a
> >> >> fundamental
> >> >> behavior that you don't understand in
> a mature
> >> software
> >> >> product that has
> >> >> been used by literally thousands of
> people for
> >> around 10
> >> >> years (>20 for S)
> >> >> is "a bug", don't you?
> >> >>
> >> >> So the answer is, no, this is how R's
> >> evaluation
> >> >> mechanism works. It is,
> >> >> admittedly, a complex issue, but
> let's see if
> >> we can
> >> >> trace it through (help
> >> >> and corrections from wiser folks would be
> >> appreciated if I
> >> >> get anything
> >> >> wrong...).
> >> >>
> >> >> When you issue your call
> >> >>
> >> >> > my.plot( y ~ x, tdf, main = main.str
> )
> >> >>
> >> >> at the command line, the
> "main=main.str"
> >> part is
> >> >> the "..."  argument (and
> >> >> can be recovered within the function e.g.
> by
> >> list(...); see
> >> >> ?browser). As
> >> >> you understand, R now passes this down to
> the
> >> generic
> >> >> plot() call (see
> >> >> ?UseMethod for info on S3 generics). This
> in turn
> >> calls
> >> >> plot.default() via
> >> >>
> >> >> > plot.default(x,y, cex.axis=0.5, main
> =
> >> main.str) .
> >> >>
> >> >> Now plot.default has to evaluate the
> name,
> >> main.str, in
> >> >> order to execute.
> >> >> Where is it to do this evaluation? It is
> **not**
> >> the top
> >> >> level (.GlobalEnv),
> >> >> which is why you threw the error message.
> So where
> >> does the
> >> >> symbol,
> >> >> "main.str," get evaluated? As I
> read the
> >> >> ?UseMethod
> >> >> documentation(corrections please here if
> I'm
> >> wrong), it
> >> >> is in the context of
> >> >> the plot call, which is within the
> my.plot
> >> function *** not
> >> >> in the parent
> >> >> frame as you said*** -- which is the
> global
> >> environment
> >> >> (where it *would*
> >> >> find it).  It does not find main.str
> there, and so
> >> you get
> >> >> an error message.
> >> >> As you noted, if you explicitly put
> main.str into
> >> the
> >> >> my.plot environment,
> >> >> it would find it and the function works
> as you
> >> expect.
> >> >>
> >> >> I think the best documentation of all
> these
> >> technicalities
> >> >> is V&R's S
> >> >> PROGRAMMING, but others may also have
> their own
> >> favorites.
> >> >> As I said, it is
> >> >> quite tricky.
> >> >>
> >> >> As for a "workaround," this
> too, gets
> >> tricky: you
> >> >> basically need to
> >> >> construct the plot call with the
> evaluated
> >> variables. The
> >> >> V&R reference
> >> >> shows you one way to do this (see the
> >> "Computing on
> >> >> the Language" chapter,
> >> >> if memory serves). There may well be
> other slicker
> >> tricks
> >> >> by now (which
> >> >> others may provide, I hope).
> >> >>
> >> >> Hope this helps... and please be more
> circumspect
> >> in future
> >> >> when asking such
> >> >> questions. R is a quite remarkable effort
> by some
> >> really
> >> >> smart people who
> >> >> have done an enormous amount of work
> essentially
> >> for
> >> >> nothing. While bugs
> >> >> certainly can and do arise, I think our
> first and
> >> almost
> >> >> always correct
> >> >> impulse should be to assume that
> there's
> >> something that
> >> >> we don't understand
> >> >> and phrase our queries accordingly.  We
> owe the
> >> developers
> >> >> this courtesy.
> >> >>
> >> >> Cheers,
> >> >>
> >> >> Bert Gunter
> >> >> Genentech, Inc.
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> -----Original Message-----
> >> >> From: r-help-bounces at r-project.org
> >> >> [mailto:r-help-bounces at r-project.org] On
> >> >> Behalf Of Amit Ganatra
> >> >> Sent: Thursday, July 10, 2008 11:51 AM
> >> >> To: r-help at r-project.org
> >> >> Subject: [R] Ellipsis arguments for
> plot.formula
> >> >>
> >> >> Hi:
> >> >> I have a function as follows:
> >> >>  my.plot    <- function( x, y = NULL,
> ... )
> >> >> {
> >> >>   plot( x, y, cex.axis=0.5, ...)
> >> >> }
> >> >>
> >> >> Set up the variables:
> >> >> x <- 1:10; y <- x; tdf <-
> data.frame( x,
> >> y );
> >> >> main.str <- "test"
> >> >>
> >> >> I will exercise the function in two ways:
> >> >>
> >> >> > my.plot( y ~ x, tdf, main =
> "test"
> >> )
> >> >> This works fine
> >> >>
> >> >> > my.plot( y ~ x, tdf, main = main.str
> )
> >> >> Error in eval(expr, envir, enclos) :
> >> >>   ..1 used in an incorrect context, no
> ... to look
> >> in
> >> >>
> >> >> Turns out that plot.formula is looking
> for the
> >> name
> >> >> "main.str" in its parent
> >> >> frame. If I define the name main.str in
> my.plot
> >> the
> >> >> function works fine.
> >> >>
> >> >> Is this a bug?
> >> >> I have a clunky workaround where I get
> the
> >> parent.frame in
> >> >> my.plot and
> >> >> create the variables in my.plot, but I
> don't
> >> like the
> >> >> solution.
> >> >>
> >> >> Thanks
> >> >>
> >> >>
> ______________________________________________
> >> >> 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