From jorismeys at gmail.com  Mon Jun  6 17:15:05 2011
From: jorismeys at gmail.com (Joris Meys)
Date: Mon, 6 Jun 2011 17:15:05 +0200
Subject: [Rd] Possible bug in termplot function (stats package) ?
Message-ID: <BANLkTikkDxdR_1+TJNX5LMkr23spvOJ4+A@mail.gmail.com>

Hi all,

I noticed some very odd behaviour in the termplot function of the
stats package due to the following lines :

18.    if (is.null(data))
19.       data <- eval(model$call$data, envir)

This one will look in the global environment, and renders the two
lines after this

20.   if (is.null(data))
21.        data <- mf

completely obsolete. If nothing is found, an error is returned. If
anything is found, data won't be NULL, so line 20, when reached, will
always return FALSE. Can it be that lines 18 and 19 should be removed
from the function?

This gives especially problems when called from other plot functions
on models made with wrapper functions. One example :

Data <- data.frame(
 x1=rnorm(100),
 x2=rnorm(100,3,2),
 y=rnorm(100)
)
form <- as.formula(y~x1+x2)
test <- lm(form, data=Data)
termplot(test)

wrapper <- function(ff,x){
 tt <- lm(ff,data=x)
}
test2 <- wrapper(form,Data)
termplot(test2)

For the non-smooth terms, termplot is called. In the first example,
this works perfectly well. In the second example, it either returns "x
not found" (when there is no x variable in the global) or "x2 not
found" when there is an x variable.

If both lines mentioned earlier are erased from the function, it works
as expected in this example code. Using the model frame seems the
logic choice here, I have no clue why one would want to look in the
global environment for the data related to a model.

Cheers
Joris

-- 
Joris Meys
Statistical consultant

Ghent University
Faculty of Bioscience Engineering
Department of Applied mathematics, biometrics and process control

tel : +32 9 264 59 87
Joris.Meys at Ugent.be
-------------------------------
Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php



[Rd] Possible bug in termplot function (stats package) ?
Joris Meys