On Sat, Nov 22, 2008 at 10:20 AM, jim holtman <[EMAIL PROTECTED]> wrote:
> c.Factor <-
> function (x, y)
> {
> newlevels = union(levels(x), levels(y))
> m = match(levels(y), newlevels)
> ans = c(unclass(x), m[unclass(y)])
> levels(ans) = newlevels
> class(ans) = "factor"
> ans
> }
This algorithm depends crucially on union preserving the order of the
elements of its arguments. As far as I can tell, the spec of union
does not require this. If union were to (for example) sort its
arguments then merge them (generally a more efficient algorithm), this
function would no longer work.
Fortunately, the fix is simple. Instead of union, use:
newlevels <- c(levels(x),setdiff(levels(y),levels(x))
which is guaranteed to preserve the order of levels(x).
-s
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.