Message-ID: <51DA7B09.3000606@gmail.com>
Date: 2013-07-08T08:40:41Z
From: Duncan Murdoch
Subject: does subset.data.frame need to accept extra arguments?
In-Reply-To: <CAJoaRhbJvHvrzTDdCDh5TNTDWLcBRZ6HTOPguAg=GfkdZoc63g@mail.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