[Rd] predict (PR#2686)

Mark.Bravington at csiro.au Mark.Bravington at csiro.au
Wed Mar 26 00:31:17 MET 2003


#       r-bugs at r-project.org

`predict' complains about new factor levels, even if the "new" levels are
merely levels in the original that didn't occur in the original fit and were
sensibly dropped, and that don't occur in the prediction data either. (At
least if `drop.unused.levels' was set to TRUE, which the default.)

test> scrunge.data.2_ data.frame( y=runif( 3), disc=factor( c( 'cat', 'dog',
'cat'), levels=c( 'cat', 'dog', 'earwig')))
test> lm.predbug.2_ lm( y~disc, data=scrunge.data.2)
test> predict(lm.predbug.2, newdata=scrunge.data.2)
Error in model.frame.default(object, data, xlev = xlev) : 
        factor disc has new level(s) earwig


A cure for this seems to be to add the commented line below towards the end
of `model.frame.default':

    <<...>>
    if (length(xlev) > 0) {
        for (nm in names(xlev)) if (!is.null(xl <- xlev[[nm]])) {
            xi <- data[[nm]]
            if (is.null(nxl <- levels(xi))) 
                warning(paste("variable", nm, "is not a factor"))
            else {
                xi <- xi[, drop = TRUE]
                nxl <- levels( xi) # MVB: remove droppees
                if (any(m <- is.na(match(nxl, xl)))) 
                  stop(paste("factor", nm, "has new level(s)", nxl[m]))
            }
        }
    }
    else if (drop.unused.levels) {
    <<...>>
    
cheers
Mark

*******************************

Mark Bravington
CSIRO (CMIS)
PO Box 1538
Castray Esplanade
Hobart
TAS 7001

phone (61) 3 6232 5118
fax (61) 3 6232 5012
Mark.Bravington at csiro.au 

--please do not edit the information below--

Version:
 platform = i386-pc-mingw32
 arch = i386
 os = mingw32
 system = i386, mingw32
 status = 
 major = 1
 minor = 6.2
 year = 2003
 month = 01
 day = 10
 language = R

Windows 2000 Professional (build 2195) Service Pack 3.0

Search Path:
 .GlobalEnv, ROOT, package:handy, package:debug, mvb.session.info,
package:mvbutils, package:tcltk, Autoloads, package:base



More information about the R-devel mailing list