# [R] Does anyone else think this might be worth a warning?!?

Sun Aug 19 14:48:45 CEST 2007

```First, note that functions in R match named arguments first, followed by
the position of the arguments in the call.

Second, have a look at how mean and max are defined

mean <- function (x, trim = 0, na.rm = FALSE, ...){

max <- function (..., na.rm = FALSE){

It's the difference in the position of "..." argument or catchall
argument (sorry, I don't know its formal name) that determines the
different behaviour. The "..." is often converted to a list internally.

So when you type in mean(1,1,2), it is treated as
"mean( x=1, trim=1, na.rm=2 )".

and when you type in max(1,1,2), it is treated as
"max( as.list(1,1,2), na.rm = FALSE )"

However, you do raise a good point. Reading mean.default(), I do not see
how and when the "..." argument in mean() comes to play. Perhaps
redefine mean to be mean <- function (..., trim = 0, na.rm = FALSE) so
that it is similar to max, sum, range etc.

But there might be a philosopphical counter argument for this as well.
Functions like mean() and sd() are supposed to summarise a single vector
whereas max, sum, range can work on several vectors by concatenating
them into a single list. Consider max( c(1,2,3), c(2,3,4) ).

Matthew Walker wrote:
> Hi,
>
> I was *very* surprised by this little trick for new players: mean() only
> considers its first argument!
>
>  > mean(1,1,2)
> [1] 1
>  > mean(2,1,1)
> [1] 2
>
>
> I found this very different behaviour to max():
>
>  > max(1,1,2)
> [1] 2
>  > max(2,1,1)
> [1] 2
>
>
>
> Perhaps this is the wrong list to ask, but does anyone else think this a
> little on the interesting side?  Is it not possible to detect a first
> argument of length one in the presence of other un-named arguments and
> at least produce a warning?
>
>
> Cheers,
>
>
> Matthew
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help