vector {base} | R Documentation |
A vector in R is either an atomic vector i.e., one of the atomic
types, see ‘Details’, or of type (typeof
) or mode
list
or expression
.
vector
produces a ‘simple’ vector of the given length and
mode, where a ‘simple’ vector has no attribute, i.e., fulfills
is.null(attributes(.))
.
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
), 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’.
vector(mode = "logical", length = 0)
as.vector(x, mode = "any")
is.vector(x, mode = "any")
mode |
character string naming an atomic mode or
|
length |
a non-negative integer specifying the desired length. For
a long vector, i.e., |
x |
an R object. |
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.
For mode = "any"
, and atomic vectors x
, as.vector(x)
strips all attributes
(including names
),
returning a simple atomic vector.
However, when x
is of type "list"
or
"expression"
, as.vector(x)
currently returns the
argument x
unchanged, unless there is an as.vector
method
for class(x)
.
Note that factors are not vectors; is.vector
returns
FALSE
and as.vector
converts a factor to a character
vector for mode = "any"
.
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 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"
.
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
mode m
, including the default "any"
.
Currently this is not fulfilled in R when m == "any"
and
x
is of type list
or expression
with
attributes in addition to names
— typically the case for
(S3 or S4) objects (see is.object
) which are lists
internally.
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.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
c
, is.numeric
, is.list
, etc.
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")