R: The (Storage) Mode of an Object

mode {base} | R Documentation

## The (Storage) Mode of an Object

### Description

Get or set the type or storage mode of an 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 `call`s 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"` and `"builtin"` are returned as `"function"`.

- type `"symbol"` is called mode `"name"`.

- type `"language"` is returned as `"("` or `"call"`.

### References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

### See Also

`typeof` for the R-internal ‘mode’, `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)

[Package base version 4.0.5 Index]