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.