From Kurt.Hornik@ci.tuwien.ac.at  Mon Jun  2 06:19:11 1997
From: Kurt.Hornik@ci.tuwien.ac.at (Kurt Hornik)
Date: Mon, 2 Jun 1997 07:19:11 +0200
Subject: R-alpha: tapply bug
Message-ID: <199706020519.HAA01997@aragorn.ci.tuwien.ac.at>

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
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


R-alpha: tapply bug
Kurt Hornik