| mode {base} | R Documentation |
The (Storage) Mode of an Object
Description
Get or set the ‘mode’ (a kind of ‘type’), or the storage mode of an R object.
Usage
mode(x)
mode(x) <- value
storage.mode(x)
storage.mode(x) <- value
Arguments
x |
any R object. |
value |
a character string giving the desired mode or ‘storage mode’ (type) of the object. |
Details
Both mode and storage.mode return a character string
giving the (storage) mode of the object — often the same — both
relying on the output of typeof(x), see the example
below.
mode(x) <- "newmode" changes the mode of object x to
newmode. This is only supported if there is an appropriate
as.newmode function, for example
"logical", "integer", "double", "complex",
"raw", "character", "list", "expression",
"name", "symbol" and "function". Attributes are
preserved (but see below).
storage.mode(x) <- "newmode" is a more efficient primitive
version of mode<-, which works for "newmode" which is
one of the internal types (see typeof), but not for
"single". Attributes are preserved.
As storage mode "single" is only a pseudo-mode in R, it will
not be reported by mode or storage.mode: use
attr(object, "Csingle") to examine this. However,
mode<- can be used to set the mode to "single",
which sets the real mode to "double" and the "Csingle"
attribute to TRUE. Setting any other mode will remove this
attribute.
Note (in the examples below) that some calls have mode
"(" which is S compatible.
Mode names
Modes have the same set of names as types (see typeof)
except that
types
"integer"and"double"are returned as"numeric".types
"special","builtin"and"closure"are returned as"function".type
"symbol"is called mode"name".type
"language"is returned as"("or"call".
References
Becker RA, Chambers JM, Wilks AR (1988). The New S Language. Chapman and Hall/CRC, London.
See Also
typeof for the R-internal ‘mode’ or ‘type’,
type.convert, attributes.
Examples
require(stats)
sapply(options(), mode)
cex3 <- c("NULL", "1", "1:1", "1i", "list(1)", "data.frame(x = 1)",
"pairlist(pi)", "c", "lm", "formals(lm)[[1]]", "formals(lm)[[2]]",
"y ~ x","expression((1))[[1]]", "(y ~ x)[[1]]",
"expression(x <- pi)[[1]][[1]]")
lex3 <- sapply(cex3, function(x) eval(str2lang(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)