R: Vectors - Creation, Coercion, etc (original) (raw)
vector {base} | R Documentation |
---|
Description
A vector in R is either an atomic vector i.e., one of the atomic types, see ‘Details’, or of type ([typeof](../../base/help/typeof.html)
) or mode[list](../../base/help/list.html)
or [expression](../../base/help/expression.html)
.
vector
produces a ‘simple’ vector of the given length and mode, where a ‘simple’ vector has no attribute, i.e., fulfillsis.null([attributes](../../base/help/attributes.html)(.))
.
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 ([is.atomic](../../base/help/is.atomic.html)
), all attributes are removed. For mode="any"
, see ‘Details’.
is.vector(x)
returns TRUE
if x
is a vector of the specified mode having no attributes other than names. For mode="any"
, see ‘Details’.
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 (seetypeof) for mode, and when mode is not"any", is.vector(x, mode) is almost the same astypeof(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](../../base/help/list.html)
and [expression](../../base/help/expression.html)
. 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.
For mode = "any"
, and atomic vectors x
, as.vector(x)
strips all [attributes](../../base/help/attributes.html)
(including [names](../../base/help/names.html)
), returning a simple atomic vector.
However, when x
is of type "[list](../../base/help/list.html)"
or"[expression](../../base/help/expression.html)"
, as.vector(x)
currently returns the argument x
unchanged, unless there is an as.vector
method for [class](../../base/help/class.html)(x)
.
Note that factors are not vectors; is.vector
returnsFALSE
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 toNULL
.
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 or expression 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 or expression. - 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 modem
, including the default"any"
.
Currently this is not fulfilled in R whenm == "any"
andx
is of type[list](../../base/help/list.html)
or[expression](../../base/help/expression.html)
with attributes in addition to[names](../../base/help/names.html)
— typically the case for (S3 or S4) objects (see[is.object](../../base/help/is.object.html)
) which are lists internally.
Note
as.vector
and is.vector
are quite distinct from the meaning of the formal class "vector"
in the methodspackage, and hence [as](../../methods/html/as.html)(x, "vector")
and[is](../../methods/html/is.html)(x, "vector")
.
Note that as.vector(x)
is not necessarily a null operation ifis.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](../../base/help/as.name.html)
and[as.pairlist](../../base/help/as.pairlist.html)
, and those functions should preferably be used directly. None of the description here applies to thosemode
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](../../base/help/c.html)
, [is.numeric](../../base/help/is.numeric.html)
, [is.list](../../base/help/is.list.html)
, 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.6.0 Index]