blob: 6ea691fe014cba85a7b032663dbb513fbafa2ece [file] [log] [blame]
% File src/library/utils/man/head.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2020 R Core Team
% Distributed under GPL 2 or later
\name{head}
\title{Return the First or Last Parts of an Object}
\alias{head}
\alias{head.data.frame}
\alias{head.default}
\alias{head.function}
\alias{head.ftable}
\alias{head.matrix}
\alias{tail}
\alias{tail.data.frame}
\alias{tail.default}
\alias{tail.function}
\alias{tail.ftable}
\alias{tail.table}
\alias{tail.matrix}
\alias{tail.array}
\description{
Returns the first or last parts of a vector, matrix, table, data frame
or function. Since \code{head()} and \code{tail()} are generic
functions, they may also have been extended to other classes.
}
\usage{
head(x, \dots)
\method{head}{default}(x, n = 6L, \dots)
% head.matrix(x, n = 6L, \dots) # <-- gives NOTE, even though exported
\method{head}{matrix}(x, n = 6L, \dots) # is exported as head.matrix()
## NB: The methods for 'data.frame' and 'array' are identical to the 'matrix' one
\method{head}{ftable}(x, n = 6L, \dots)
\method{head}{function}(x, n = 6L, \dots)
tail(x, \dots)
\method{tail}{default}(x, n = 6L, keepnums = FALSE, addrownums, \dots)
\method{tail}{matrix}(x, n = 6L, keepnums = TRUE, addrownums, \dots) # exported as tail.matrix()
## NB: The methods for 'data.frame', 'array', and 'table'
## are identical to the 'matrix' one
\method{tail}{ftable}(x, n = 6L, keepnums = FALSE, addrownums, \dots)
\method{tail}{function}(x, n = 6L, \dots)
}
\arguments{
\item{x}{an object}
\item{n}{an integer vector of length up to \code{dim(x)} (or 1,
for non-dimensioned objects). Values specify the indices to be
selected in the corresponding dimension (or along the length) of the
object. A positive value of \code{n[i]} includes the first/last
\code{n[i]} indices in that dimension, while a negative value
excludes the last/first \code{abs(n[i])}, including all remaining
indices. \code{NA} or non-specified values (when \code{length(n) <
length(dim(x))}) select all indices in that dimension. Must
contain at least one non-missing value.}
\item{keepnums}{in each dimension, if no names in that dimension are
present, create them using the indices included in that dimension.
Ignored if \code{dim(x)} is \code{NULL} or its length 1.}
\item{addrownums}{deprecated - \code{keepnums} should be used
instead. Taken as the value of \code{keepnums} if it is explicitly
set when \code{keepnums} is not.}
\item{\dots}{arguments to be passed to or from other methods.}
}
\details{
For vector/array based objects, \code{head()} (\code{tail()}) returns
a subset of the same dimensionality as \code{x}, usually of
the same class. For historical reasons, by default they select the
first (last) 6 indices in the first dimension ("rows") or along the
length of a non-dimensioned vector, and the full extent (all indices)
in any remaining dimensions. \code{head.matrix()} and
\code{tail.matrix()} are exported.
The default and array(/matrix) methods for \code{head()} and
\code{tail()} are quite general. They will work as is for any class
which has a \code{dim()} method, a \code{length()} method (only
required if \code{dim()} returns \code{NULL}), and a \code{[} method
(that accepts the \code{drop} argument and can subset in all
dimensions in the dimensioned case).
For functions, the lines of the deparsed function are returned as
character strings.
When \code{x} is an array(/matrix) of dimensionality two and more,
\code{tail()} will add dimnames similar to how they would appear in a
full printing of \code{x} for all dimensions \code{k} where
\code{n[k]} is specified and non-missing and \code{dimnames(x)[[k]]}
(or \code{dimnames(x)} itself) is \code{NULL}. Specifically, the
form of the added dimnames will vary for different dimensions as follows:
\describe{
\item{\code{k=1} (rows): }{\code{"[n,]"} (right justified with
whitespace padding)}
\item{\code{k=2} (columns): }{\code{"[,n]"} (with \emph{no} whitespace
padding)}
\item{\code{k>2} (higher dims): }{\code{"n"}, i.e., the indices as
\emph{character} values}
}
Setting \code{keepnums = FALSE} suppresses this behaviour.
As \code{\link{data.frame}} subsetting (\sQuote{indexing}) keeps
\code{\link{attributes}}, so do the \code{head()} and \code{tail()}
methods for data frames.
}
\value{
An object (usually) like \code{x} but generally smaller. Hence, for
\code{\link{array}}s, the result corresponds to \code{x[.., drop=FALSE]}.
For \code{\link{ftable}} objects \code{x}, a transformed \code{format(x)}.
}
\note{
For array inputs the output of \code{tail} when \code{keepnums} is \code{TRUE},
any dimnames vectors added for dimensions \code{>2} are the original
numeric indices in that dimension \emph{as character vectors}. This
means that, e.g., for 3-dimensional array \code{arr},
\code{tail(arr, c(2,2,-1))[ , , 2]} and
\code{tail(arr, c(2,2,-1))[ , , "2"]} may both be valid but have
completely different meanings.
}
\author{
Patrick Burns, improved and corrected by R-Core. Negative argument
added by Vincent Goulet. Multi-dimension support added by Gabriel Becker.
}
\examples{
head(letters)
head(letters, n = -6L)
head(freeny.x, n = 10L)
head(freeny.y)
head(iris3)
head(iris3, c(6L, 2L))
head(iris3, c(6L, -1L, 2L))
tail(letters)
tail(letters, n = -6L)
tail(freeny.x)
## the bottom-right "corner" :
tail(freeny.x, n = c(4, 2))
tail(freeny.y)
tail(iris3)
tail(iris3, c(6L, 2L))
tail(iris3, c(6L, -1L, 2L))
## iris with dimnames stripped
a3d <- iris3 ; dimnames(a3d) <- NULL
tail(a3d, c(6, -1, 2)) # keepnums = TRUE is default here!
tail(a3d, c(6, -1, 2), keepnums = FALSE)
## data frame w/ a (non-standard) attribute:
treeS <- structure(trees, foo = "bar")
(n <- nrow(treeS))
stopifnot(exprs = { # attribute is kept
identical(htS <- head(treeS), treeS[1:6, ])
identical(attr(htS, "foo") , "bar")
identical(tlS <- tail(treeS), treeS[(n-5):n, ])
## BUT if I use "useAttrib(.)", this is *not* ok, when n is of length 2:
## --- because [i,j]-indexing of data frames *also* drops "other" attributes ..
identical(tail(treeS, 3:2), treeS[(n-2):n, 2:3] )
})
tail(library) # last lines of function
head(stats::ftable(Titanic))
## 1d-array (with named dim) :
a1 <- array(1:7, 7); names(dim(a1)) <- "O2"
stopifnot(exprs = {
identical( tail(a1, 10), a1)
identical( head(a1, 10), a1)
identical( head(a1, 1), a1 [1 , drop=FALSE] ) # was a1[1] in R <= 3.6.x
identical( tail(a1, 2), a1[6:7])
identical( tail(a1, 1), a1 [7 , drop=FALSE] ) # was a1[7] in R <= 3.6.x
})
}
\keyword{manip}