R: Vectors

vector {base} | R Documentation

## Vectors

### Description

`vector` produces a vector of the given length and mode.

`as.vector`, a generic, attempts to coerce its argument into a vector of mode `mode` (the default is to coerce to whichever vector mode is most convenient): if the result is atomic all attributes are removed.

`is.vector` returns `TRUE` if `x` is a vector of the specified mode having no attributes other than names. It returns `FALSE` otherwise.

### Usage

    vector(mode = "logical", length = 0)
    as.vector(x, mode = "any")
    is.vector(x, mode = "any")

### Arguments

`mode` | character string naming an atomic mode or `"list"` or `"expression"` or (except for `vector`) `"any"`. Currently, `is.vector()` allows any type (see `typeof`) for `mode`, and when mode is not `"any"`, `is.vector(x, mode)` is almost the same as `typeof(x) == mode`.

`length` | a non-negative integer specifying the desired length. For a long vector, i.e., `length > .Machine$integer.max`, it has to be of type `"double"`. Supplying an argument of length other than one is an error.
`x` | an R object.

### Details

The atomic modes are `"logical"`, `"integer"`, `"numeric"` (synonym `"double"`), `"complex"`, `"character"` and `"raw"`.

If `mode = "any"`, `is.vector` may return `TRUE` for the atomic modes, `list` and `expression`. For any `mode`, it will return `FALSE` if `x` has any attributes except names. (This is incompatible with S.) On the other hand, `as.vector` removes all attributes including names for results of atomic mode (but not those of mode `"list"` nor `"expression"`).

Note that factors are not vectors; `is.vector` returns `FALSE` and `as.vector` converts a factor to a character vector for `mode = "any"`.

### Value

For `vector`, a vector of the given length and mode. Logical vector elements are initialized to `FALSE`, numeric vector elements to `0`, character vector elements to `""`, raw vector elements to `nul` bytes and list/expression elements to `NULL`.

For `as.vector`, a vector (atomic or of type list or expression). All attributes are removed from the result if it is of an atomic mode, but not in general for a list result. The default method handles 24 input types and 12 values of `type`: the details of most coercions are undocumented and subject to change.

For `is.vector`, `TRUE` or `FALSE`. `is.vector(x, mode = "numeric")` can be true for vectors of types `"integer"` or `"double"` whereas `is.vector(x, mode = "double")` can only be true for those of type `"double"`.

### Methods for `as.vector()`

Writers of methods for `as.vector` need to take care to follow the conventions of the default method. In particular

- Argument `mode` can be `"any"`, any of the atomic modes, `"list"`, `"expression"`, `"symbol"`, `"pairlist"` or one of the aliases `"double"` and `"name"`.

- The return value should be of the appropriate mode. For `mode = "any"` this means an atomic vector or list.

- Attributes should be treated appropriately: in particular when the result is an atomic vector there should be no attributes, not even names.

- `is.vector(as.vector(x, m), m)` should be true for any mode `m`, including the default `"any"`.

### Note

`as.vector` and `is.vector` are quite distinct from the meaning of the formal class `"vector"` in the methods package, and hence `as(x, "vector")` and `is(x, "vector")`.

Note that `as.vector(x)` is not necessarily a null operation if `is.vector(x)` is true: any names will be removed from an atomic vector.

Non-vector `mode`s `"symbol"` (synonym `"name"`) and `"pairlist"` are accepted but have long been undocumented: they are used to implement `as.name` and `as.pairlist`, and those functions should preferably be used directly. None of the description here applies to those `mode`s: see the help for the preferred forms.

### References

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

### See Also

`c`, `is.numeric`, `is.list`, etc.

### Examples

    df <- data.frame(x = 1:3, y = 5:7)
    ## Error:
    try(as.vector(data.frame(x = 1:3, y = 5:7), mode = "numeric"))

    x <- c(a = 1, b = 2)
    is.vector(x)
    as.vector(x)
    all.equal(x, as.vector(x)) ## FALSE

    ###-- All the following are TRUE:
    is.list(df)
    ! is.vector(df)
    ! is.vector(df, mode = "list")

    is.vector(list(), mode = "list")

[Package base version 4.0.5 Index]