R-alpha: tapply bug

Kurt Hornik Kurt.Hornik@ci.tuwien.ac.at
Mon, 2 Jun 1997 07:19:11 +0200

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)


	namelist[[i]] <- unique(levels(index)[index])

but perhaps there is something smarter ...


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