scoping error in xy.coords (PR#932)
On Fri, 4 May 2001 kjetilh@umsanet.edu.bo wrote:
Hola!
rm(list=ls(all=TRUE))
x <- 1:20 y <- 1+x+rnorm(x)
xy.coords(y ~ x,NULL)
... expected output, correct, but when called from inside lowess:
lowess(y ~ x)
Error in xy.coords(x, y) : x and y lengths differ
If you don't call them x and y it works
x<-1:10 y<-1:10 lowess(y~x)
Error in xy.coords(x, y) : x and y lengths differ
z<-y w<-x lowess(z~w)
$x [1] 1 2 3 4 5 6 7 8 9 10 $y [1] 1 2 3 4 5 6 7 8 9 10 The problem is that the formula is evaluated in the parent frame, where y evaluates to NULL, and x evaluates to y~x, rather than in the global environment where they would both evaluate to vectors. In order to handle formulas correctly I think xy.coords needs to use the same sort of indirect evaluation as model.frame: eg xy <-substitute(xy.coords(X,Y),list(X=substitute(x),Y=substitute(y))) xy<-eval(xy,parent.frame()) works as a replacement for the first two lines of lowess(). I hadn't realised that xy.coords() was supposed to handle formulas, and since it doesn't have a data= argument it can't do it very well. This seems a bit drastic, given the number of times xy.coords is used. Perhaps there's a simpler solution. -thomas Thomas Lumley Asst. Professor, Biostatistics tlumley@u.washington.edu University of Washington, Seattle ^^^^^^^^^^^^^^^^^^^^^^^^ NOTE NEW EMAIL ADDRESS -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._