Rev 89289 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/dimnames.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2026 R Core Team% Distributed under GPL 2 or later\name{dimnames}\title{Dimnames of an Object}\alias{dimnames}\alias{dimnames<-}\alias{dimnames.data.frame}\alias{dimnames<-.data.frame}\alias{provideDimnames}\description{Retrieve or set the dimnames of an object.}\usage{dimnames(x)dimnames(x) <- valueprovideDimnames(x, sep = "", base = list(. = LETTERS), unique = TRUE,use.names = FALSE)}\arguments{\item{x}{an \R object, for example a matrix, array or data frame.}\item{value}{a possible value for \code{dimnames(x)}: see the\sQuote{Value} section.}\item{sep}{a character string, used to separate \code{base}symbols and digits in the constructed dimnames.}\item{base}{a non-empty \code{\link{list}} of character vectors. Thelist components are used in turn (and recycled when needed) toconstruct replacements for empty dimnames components. See also theexamples.}\item{unique}{logical indicating that the dimnames constructed areunique within each dimension in the sense of \code{\link{make.unique}}.}\item{use.names}{a logical indicating if \code{names(base)}is used to replace empty elements of \code{names(dimnames(x))}. If\code{TRUE}, then \code{unique} and \code{sep} apply to theconstructed names, as well.}}\details{The functions \code{dimnames} and \code{dimnames<-} are generic.For an \code{\link{array}} (and hence in particular, for a\code{\link{matrix}}), they retrieve or set the \code{dimnames}attribute (see \link{attributes}) of the object. A list\code{value} can have names, and these will be used to label thedimensions of the array where appropriate.The replacement method for arrays/matrices coerces vector and factorelements of \code{value} to character, but does not dispatch methodsfor \code{as.character}. It coerces zero-length elements to\code{NULL}, and a zero-length list to \code{NULL}. If \code{value}is a list shorter than the number of dimensions, it is extended with\code{NULL}s to the needed length.Both have methods for data frames. The dimnames of a data frame areits \code{\link{row.names}} and its \code{\link{names}}. For thereplacement method each component of \code{value} will be coerced by\code{\link{as.character}}.For a 1D matrix the \code{\link{names}} are the same thing as the(only) component of the \code{dimnames}.Both are \link{primitive} functions.\code{provideDimnames(x)} provides \code{dimnames} where\dQuote{missing}, such that its result has \code{\link{character}}dimnames for each component. If \code{unique} is true as by default,they are unique within each component via \code{\link{make.unique}(*,sep=sep)}.}\value{The dimnames of a matrix or array can be \code{NULL} (which is notstored) or a list of the same length as \code{dim(x)}. If a list, itscomponents are either \code{NULL} or a character vector with positivelength of the appropriate dimension of \code{x}. The list can havenames. It is possible that all components are \code{NULL}: suchdimnames may get converted to \code{NULL}.For the \code{"data.frame"} method both dimnames are charactervectors, and the rownames must contain no duplicates nor missingvalues.\code{provideDimnames(x)} returns \code{x}, with \dQuote{\code{NULL} -free} \code{dimnames}, i.e.\sspace{}each component a character vector ofcorrect length.}\note{Setting components of the dimnames, e.g.,\code{dimnames(A)[[1]] <- value} is a common paradigm, but note thatit will not work if the value assigned is \code{NULL}. Use\code{\link{rownames}} instead, or (as it does) manipulate the wholedimnames list.}\references{\bibshow{R:Becker+Chambers+Wilks:1988}}\seealso{\code{\link{rownames}}, \code{\link{colnames}};\code{\link{array}}, \code{\link{matrix}}, \code{\link{data.frame}}.}\examples{## simple versions of rownames and colnames## could be defined as followsrownames0 <- function(x) dimnames(x)[[1]]colnames0 <- function(x) dimnames(x)[[2]](dn <- dimnames(A <- provideDimnames(N <- array(1:24, dim = 2:4))))A0 <- A; dimnames(A)[2:3] <- list(NULL)stopifnot(identical(A0, provideDimnames(A)))strd <- function(x) utils::str(dimnames(x))strd(provideDimnames(A, base= list(letters[-(1:9)], tail(LETTERS))))strd(provideDimnames(N, base= list(letters[-(1:9)], tail(LETTERS)))) # recyclingstrd(provideDimnames(A, base= list(c("AA","BB")))) # recycling on both levels## set "empty dimnames":provideDimnames(rbind(1, 2:3), base = list(""), unique=FALSE)## optionally handling names(dimnames(.))L3 <- structure(vector("list", 3L), names = c("", "~~", ""))strd(N3 <- structure(N, dimnames = L3))strd(provideDimnames(N3, use.names = TRUE, unique = FALSE))strd(provideDimnames(N3, use.names = TRUE))}\keyword{array}\keyword{manip}