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.