The R Project SVN R

Rev

Rev 6295 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

\name{mode}
\title{The (Storage) Mode of an Object}
\usage{
mode(x)
mode(x) <- "<mode>"
storage.mode(x)
storage.mode(x) <- "<mode>"
}
\alias{mode}
\alias{mode<-}
\alias{storage.mode}
\alias{storage.mode<-}
\description{
  \code{mode} and \code{storage.mode} provide means of determining the
  type or storage mode of an object.  Both return a character string
  giving the (storage) mode of the object -- often the same -- both
  relying on the output of \code{\link{typeof}(x)}, see the example
  below.

  The two assignment versions are currently identical.  Both
  \code{mode(x) <- newmode} and \code{storage.mode(x) <- newmode} change
  the \code{mode} or \code{storage.mode} of object \code{x} to
  \code{newmode}.
}
\seealso{
  \code{\link{typeof}} for the R-internal ``mode'',
  \code{\link{attributes}}.
}
\details{
    As storage mode "single" is only a pseudo-mode in \R, it will not be
    reported by \code{mode} or \code{storage.mode}: use
    \code{attr(object, "Csingle")} to examine this. However, the
    assignment versions can be used to set the mode to \code{"single"},
    which sets the real mode to \code{"double"} and the \code{"Csingle"}
    attribute to \code{TRUE}. Setting any other mode will remove the
    \code{"Csingle"} attribute.
}
\examples{
sapply(options(),mode)

cex3 <- c("NULL","1","1:1","1i","list(1)","data.frame(x=1)", "pairlist(pi)",
  "args", "lm", "formals(lm)[[1]]",  "formals(lm)[[2]]",
  "y~x","(y~x)[[1]]", "expression(x <- pi)[[1]][[1]]")
lex3 <- sapply(cex3, function(x) eval(parse(text=x)))
mex3 <- t(sapply(lex3, function(x) c(typeof(x), storage.mode(x), mode(x))))
dimnames(mex3) <- list(cex3, c("typeof(.)","storage.mode(.)","mode(.)"))
mex3

## This also makes a local copy of  `pi':
storage.mode(pi) <- "complex"
storage.mode(pi)
rm(pi)
}
\keyword{attribute}