On 10/29/2006 6:08 PM, Matthew Walker wrote: > On Sat, 2006-10-28 at 08:03 -0400, Duncan Murdoch wrote: >> On 10/27/2006 11:06 PM, Matthew Walker wrote: >>> Hi everyone, >>> >>> I think I have found a minor issue with the R function "boxplot.stats". >>> But before I make such a rash comment, I'd like to check my facts by >>> fixing what I think is the problem. However, why I try to do this, R >>> does not behave as I expect. Can you tell me what I'm doing wrong? >>> >>> If I use the command: >>> debug(boxplot.stats) >>> I am allowed to step through the code as normal. >>> >>> I then want to edit the function, so I type: >>> boxplot.stats <- edit(boxplot.stats) >>> and I make my changes. >>> >>> I can check my changes have been made by typing: >>> boxplot.stats >>> and the updated version appears on screen. >>> >>> But now when I come to test my changes, the "debug" functionality has >>> just up and disappeared; I can no longer step though the function as >>> normal. Further to that, it appears that the change has somehow not >>> been registered, as exactly the same error occurs---although I cannot be >>> sure that it is occurring inside boxplot.stats. >>> >>> Does anyone have any tips, suggestions or comments? I'd love to be able >>> to fix this. >>> >>> (For what it's worth I wish to change line 14 of boxplot.stats so that >>> it reads "if (any(out[nna],na.rm=TRUE))".) >> Besides what Gabor said, an issue here is that boxplot.stats lives in >> the grDevices namespace. If you call boxplot(), it will look there >> before it sees your locally modified copy. >> >> For testing, you can call boxplot.stats directly from the console, or >> also make a local copy of boxplot. >> >> Not sure why boxplot.stats is in grDevices rather than graphics, but >> that's not really relevant to your problems. >> >> Duncan Murdoch >> > > Hi Duncan, > > Thanks for your reply. > > How do you know that (i) boxplot.stats lives in the grDevices namespace?
getAnywhere(boxplot.stats) starts out as > getAnywhere(boxplot.stats) A single object matching 'boxplot.stats' was found It was found in the following places package:grDevices registered S3 method for boxplot from namespace grDevices namespace:grDevices > and (ii) how do you know/change that boxplot will look in grDevices > before it uses the local copy? That was actually a guess. But checking now: > getAnywhere(boxplot) A single object matching 'boxplot' was found It was found in the following places package:graphics namespace:graphics with value function (x, ...) UseMethod("boxplot") <environment: namespace:graphics> so boxplot() is in the graphics package, and works in that namespace. The graphics namespace file starts out import(grDevices) so functions in that package will look in grDevices before they look elsewhere. I thought that meant that S3 methods would be found there before they're found anywhere else, but I didn't actually check this. So let's check: > boxplot.stats <- function(x, ...) stop("mine") > x <- 1 > class(x) <- "stats" > boxplot(x) Error in boxplot.stats(x) : mine Whoops! Looks as though my local copy does get found first. Not sure if this is a bug... > I tried to do as you suggested and create a local copy of boxplot. I > used the following commands: > boxplot.stats <- edit(boxplot.stats) # Made changes to line 14 > boxplot <- edit(boxplot) > boxplot.default <- edit(boxplot.default) # Added a call to "cat()" > > When I called boxplot() the local copy was executed (as I could see the > output of my "cat" commands), however it appears that the local copy of > boxplot.stats isn't the one being called from my version of "boxplot". > How do I fix this? That's very strange. Which R version are you using? Are you sure the wrong version was being called? I was doing my tests in 2.4.0. Duncan Murdoch ______________________________________________ R-help@stat.math.ethz.ch 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.