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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> wrote:
>
>> From: Gabor Grothendieck <[EMAIL PROTECTED]>
>> Subject: Re: [R] Ellipsis arguments for plot.formula
>> To: [EMAIL PROTECTED]
>> Cc: "Bert Gunter" <[EMAIL PROTECTED]>, r-help@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
>> <[EMAIL PROTECTED]> 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
>> <[EMAIL PROTECTED]> wrote:
>> >
>> >> From: Bert Gunter <[EMAIL PROTECTED]>
>> >> Subject: RE: [R] Ellipsis arguments for
>> plot.formula
>> >> To: [EMAIL PROTECTED]
>> >> Cc: r-help@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: [EMAIL PROTECTED]
>> >> [mailto:[EMAIL PROTECTED] On
>> >> Behalf Of Amit Ganatra
>> >> Sent: Thursday, July 10, 2008 11:51 AM
>> >> To: r-help@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@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.
>> >
>
>
>
>

______________________________________________
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