[Rd] PR#6614

Bill Dunlap bill at insightful.com
Mon Feb 27 18:57:57 CET 2006

On Wed, 23 Feb 2006, Peter Dalgaard wrote:

> "Gabor Grothendieck" <ggrothendieck at gmail.com> writes:
> > Try this:
> >
> >  subset(iris, select = - Species)
> Or, canonically,
> nm <- names(iris)
> iris[, nm != "Species" ]
> iris[, -match("Species", nm)]
> >
> > On 2/22/06, davidhughjones at gmail.com <davidhughjones at gmail.com> wrote:
> > > I agree with the submitter that this needs some kind of solution.
> > > Although data.frame[,-12] works, how do I drop a named column (the
> > > most common use case)? (I found this bug while searching for an
> > > answer.)

That code with match only works if "Species" is actually
a column of iris.  If not, your result depends on whether
you have a data.frame (an error) or a matrix (a column
of NA's).

I found some mail in a 15 year old sent-mail file that suggested
allowing the tag 'except=' on any of the arguments to "[" to
replace/extend the limited negative integer convention.  The idea was
    iris[ except=c(10:20), except=c("Petal.Width","Petal.Length")) ]
would return all rows except 10:20 and all columns except
the ones named.
    iris[ except=integer(0), ]
would return all rows of iris, while iris[-integer(0), ] returns
no rows of iris.

This abuses the tag= notation, but the "[" function doesn't
really support the i= and j= tags that some people expect.

This would take care of the problem that subset(data.frame,select=-name)
only lets you omit columns.

The mail had a version of [.data.frame (for Splus 2.1?) that
implemented this, although, if it is to be used it should be
implemented in the most primitive [ code so all methods use it.

Bill Dunlap
Insightful Corporation
bill at insightful dot com

 "All statements in this message represent the opinions of the author and do
 not necessarily reflect Insightful Corporation policy or position."

More information about the R-devel mailing list