There is a problem with tapply() in the case where INDEX is a factor with at least one of its levels not occurring in it. In this case, namelist[[i]] <- levels(index) gets all levels but group <- group + ngroup * (codes(index) - 1) only those occurring in index, which subsequently causes names(ans) <- namelist[[1]] to fail. For example, R> f <- factor(c("a", "a", "b"), levels = letters[1:3]) R> f [1] a a b R> codes(f) [1] 1 1 2 R> levels(f) [1] "a" "b" "c" which gives e.g. R> tapply(rep(1, length(f)), f, sum) Error: names attribute must be the same length as the vector One solution is to replace namelist[[i]] <- levels(index) by namelist[[i]] <- unique(levels(index)[index]) but perhaps there is something smarter ... -k =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 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 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-