Extract {base} | R Documentation |
Operators act on vectors, arrays, dataframes and lists to extract or replace subsets.
x[i] x[i, j, ...] x[i, j, ... , drop=TRUE] x[[i]] x[[i, j, ...]] x$name .subset(x, ...) .subset2(x, ...)
x |
object from which to extract elements |
i,j,...,name |
elements to extract or replace. i,j are
either numeric or character where name must be
character or an (unquoted) name. Numeric values are coerced to
integer as by as.integer(i) . |
drop |
For data frames, matrices, and arrays. If TRUE the
result is coerced to the lowest possible dimension (see examples
below). |
If one of these expressions appears on the left side of an assignment
then that part of x
is set to the value of the right hand side
of the assignment.
These operators are generic. You can write methods to handle subsetting of specific classes of objects, see InternalMethods.
The [[
operator requires all relevant subscripts to be supplied.
With the [
operator a comma separated blank indicates that all
entries in that dimension are selected.
Indexing by factors is allowed and is equivalent to indexing by the
numeric codes (see factor
) and not by the character
values which are printed (for which use [as.character(i)]
).
When [.data.frame
is used for subsetting rows of a
data.frame
, it returns a dataframe with unique
(and non-missing)row names, if necessary transforming the names using
make.names( * , unique = TRUE)
. See the swiss
example below.
When operating on a list, the [[
operator gives the specified
element of the list while the [
operator returns a list with
the specified element(s) in it.
As from R 1.7.0 [[
can be applied recursively to lists, so
that if the single index i
is a vector of length p
,
alist[[i]]
is equivalent to alist[[i1]]...[[ip]]
providing all but the final indexing results in a list.
The operators $
and $<-
do not evaluate their second
argument. It is translated to a string and that string is used to
locate the correct component of the first argument.
The functions .subset
and .subset2
are essentially
equivalent to the [
and [[
operators, except that
methods dispatch does not take place. This is to avoid expensive
unclassing in order to apply the default method to an object. They
should not normally be invoked by end users.
Syntax
for operator precedence, and the
R Language reference manual about indexing details.
x <- 1:12; m <- matrix(1:6,nr=2); li <- list(pi=pi, e = exp(1)) x[10] # the tenth element of x m[1,] # the first row of matrix m m[1, , drop = FALSE] # is a 1-row matrix li[[1]] # the first element of list li y <- list(1,2,a=4,5) y[c(3,4)] # a list containing elements 3 and 4 of y y$a # the element of y named a data(swiss) swiss[ c(1, 1:2), ] # duplicate row, unique row names ## non-integer indices are truncated: (i <- 3.999999999) # "4" is printed (1:5)[i] # 3 ## recursive indexing into lists z <- list( a=list( b=9, c='hello'), d=1:5) unlist(z) z[[c(1, 2)]] z[[c(1, 2, 1)]] # both "hello" z[[c("a", "b")]] <- "new" unlist(z)