From murdoch.duncan at gmail.com  Mon Jul  8 10:40:41 2013
From: murdoch.duncan at gmail.com (Duncan Murdoch)
Date: Mon, 08 Jul 2013 04:40:41 -0400
Subject: [Rd] does subset.data.frame need to accept extra arguments?
In-Reply-To: <CAJoaRhbJvHvrzTDdCDh5TNTDWLcBRZ6HTOPguAg=GfkdZoc63g@mail.gmail.com>
References: <CAJoaRhbJvHvrzTDdCDh5TNTDWLcBRZ6HTOPguAg=GfkdZoc63g@mail.gmail.com>
Message-ID: <51DA7B09.3000606@gmail.com>

On 13-07-07 11:09 PM, Peter Meilstrup wrote:
> The formal list for subset.data.frame accepts a "..."
>
>> args(subset.data.frame)
> function (x, subset, select, drop = FALSE, ...)
> NULL
>
> But it appears that subset.data.frame does not actually use the "..." or
> pass it along:
>
>> "..." %in% all.names(body(subset.data.frame))
> [1] FALSE
>
> Is there any reason why subset.data.frame needs to accept extra, unused
> arguments? One recurring error I see myself and other people making in
> interactive use is to type an = instead of an == in a subset call, e.g.
>
> subset(df, column=value)
>
> which I think ought to be an error, but it silently returns df instead.
>
> If "..." were eliminated from the formals of subset.data.frame, it would
> eliminate a frequent user error.

It needs to have ... in the formal argument list because the generic 
subset() does.

It could enforce a run-time warning that some arguments were being 
skipped (by testing length(list(...)) for example), but then NextMethod 
might fail, in a case where an object has a complicated class vector.

This is basically a limitation of the S3 class system.  The S4 system 
can do much more careful checking.

Duncan Murdoch



[Rd] does subset.data.frame need to accept extra arguments?
Duncan Murdoch