Peter Meilstrup
2013-Jul-08 03:09 UTC
[Rd] does subset.data.frame need to accept extra arguments?
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. Peter [[alternative HTML version deleted]]
Duncan Murdoch
2013-Jul-08 08:40 UTC
[Rd] does subset.data.frame need to accept extra arguments?
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