From romain.francois at dbmail.com  Fri Mar  6 17:30:09 2009
From: romain.francois at dbmail.com (Romain Francois)
Date: Fri, 06 Mar 2009 17:30:09 +0100
Subject: [Rd] Bug in codetools ?
Message-ID: <49B14F91.4010608@dbmail.com>

Hello,

Is this a bug in codetools:

 > codetools::showTree( body( glm) )
("{" (<- call (match.call)) (if (is.character family) (<- family (get 
family "function" (parent.frame)))) (if (is.function family) (<- 
family(family))) (if (is.null ($ family family)) ("{" (print family) 
(stop "'family' not recognized"))) (if (missing data) (<- data 
(environment formula))) (<- mf (match.call FALSE)) (<- m (match (c 
"formula" "data" "subset" "weights" "na.action" "etastart" "mustart" 
"offset") (names mf) 0L)) (<- mf ([ mf (c 1 m))) (<- ($ mf 
drop.unused.levels) TRUE) (<- ([[ mf 1L) (as.name "model.frame")) (<- mf 
(eval mf (parent.frame))) (switch method (return mf) 1 (stop "invalid 
'method': " method)) (<- mt (attr mf "terms")) (<- Y (model.response mf 
"any")) (if (== (length (dim Y)) 1L) ("{" (<- nm (rownames Y)) (<- (dim 
Y) NULL) (if (! (is.null nm)) (<- (names Y) nm)))) (<- X (if (! 
(is.empty.model mt)) (model.matrix mtmf contrasts) (matrix Error in 
typeof(e) :
  element 1 is empty;
   the part of the args list of '.Internal' being evaluated was:
   (x)


The problem seems to happen because of the call to matrix with a missing 
argument in glm: matrix(, NROW(Y), 0L)

The fix is to rewrite showTreeCall like this :

showTreeCall <- function (e, w)
{
    w$write("(")
    walkCode(e[[1]], w)
    for (a in as.list(e[-1])) {
        if( !missing(a)){
                w$write(" ")
                walkCode(a, w)
        }
    }
    w$write(")")
}

 > version
               _
platform       i686-pc-linux-gnu
arch           i686
os             linux-gnu
system         i686, linux-gnu
status         Under development (unstable)
major          2
minor          9.0
year           2009
month          03
day            03
svn rev        48044
language       R
version.string R version 2.9.0 Under development (unstable) (2009-03-03 
r48044)

-- 
Romain Francois
Independent R Consultant
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr



[Rd] Bug in codetools ?
Romain Francois