I got an email error message when I attempted to send this from my work account. I have manually added it to the bug tracker, and am resending from my personal account.
-G On 12/12/05, Warnes, Gregory R <[EMAIL PROTECTED]> wrote: > > > > > -----Original Message----- > > From: Warnes, Gregory R > > Sent: Monday, December 12, 2005 1:53 PM > > To: '[EMAIL PROTECTED]' > > Subject: Bug in sum() with named data frame arguments > > > > > > Sum fails if it is passed a data frame argument with a name. It also > generated different error messages depending on exactly how the data frame > is passed in: > > > > > df <- data.frame(m1=1:2,m2=3:4) > > > df > > m1 m2 > > 1 1 3 > > 2 2 4 > > > sum(df) # succeeds > > [1] 10 > > > sum(df=df) # fails > > Error in as.matrix(x) : argument "x" is missing, with no default > > > sum(1,df=df) # fails, different error message > > Error in sum(..., na.rm = na.rm) : invalid 'mode' of argument > > > sum(df=df,1) # fails, different error message > > Error in sum.default(..., na.rm = na.rm) : > > invalid 'mode' of argument > > ## Note: no sum.default exists... > > > > > > No similar problem exists for matrixes: > > > > > x <- as.matrix(df) > > > sum(x) > > [1] 10 > > > sum(df=x) > > [1] 10 > > > sum(m1=x) > > [1] 10 > > > sum(1,m1=x) > > [1] 11 > > > sum(m1=x,1) > > [1] 11 > > > > > > > The cause seems to be that the generic sum is defined as: > > > > > sum > > function (..., na.rm = FALSE) > > .Internal(sum(..., na.rm = na.rm)) > > <environment: namespace:base> > > > > but the S3 methods are defined as > > > > > Summary.data.frame > > function (x, ...) > > { > > x <- as.matrix(x) > > if (!is.numeric(x) && !is.complex(x)) > > stop("only defined on a data frame with all numeric or complex > variables") > > NextMethod(.Generic) > > } > > <environment: namespace:base> > > > > I suspect that the proper resolution of this bug is to change the base > 'sum' method to provide a 1st argument named 'x', and to update the > documentation. > > > > Note that the current implementation also failes when more than one data > frame argument is supplied: > > > > > sum(y,y,y) > > Error in sum.default(..., na.rm = na.rm) : > > invalid 'mode' of argument > > > > while the same thing with matrixes works fine: > > > > > sum(y,y,y) > > Error in sum.default(..., na.rm = na.rm) : > > invalid 'mode' of argument > > > > -Greg > > > > Gregory R. Warnes, Ph.D. > > Associate Director, Non-Clinical Statistics > > Pfizer Global Research and Development > > > > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel