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.