This bug shows up in ftable() in both r-patched and r-devel:

> x <- c(1,2)
> y <- c(1,2)
> z <- c(1,1)
> ftable(z,y)
  y 1 2
z      
1   1 1
> ftable(z,x)
  x 1
z    
1   2

Since x and y are identical, the two ftable results should be the
same, but they are not.  

I've only been able to see this when the column variable is named "x",
so it looks like a scoping problem in ftable.default.  I think the
problem is in this line:

x <- do.call("table", c(as.list(substitute(list(...)))[-1],
list(exclude = exclude)))

I think this call is finding the local variable "x" (which has been
used before this line) instead of the argument "x" and thus produces
an incorrect result.

How should this be fixed?  What we want is to convert "..." into an
evaluated list that includes the deparsed arguments as names.  Just
plain list(...) loses the names.

I think this works:

args <- list(...)
names(args) <-
as.character(unlist(as.list(substitute(list(...)))))[-1]
x <- do.call("table", args)

but isn't there an easier way?

Duncan Murdoch

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-devel

Reply via email to