numeric {base} | R Documentation |

## Numeric Vectors

### Description

Creates or coerces objects of type `"numeric"`

.
`is.numeric`

is a more general test of an object being
interpretable as numbers.

### Usage

```
numeric(length = 0)
as.numeric(x, ...)
is.numeric(x)
```

### Arguments

`length` |
a non-negative integer specifying the desired length. Double values will be coerced to integer: supplying an argument of length other than one is an error. |

`x` |
object to be coerced or tested. |

`...` |
further arguments passed to or from other methods. |

### Details

`numeric`

is identical to `double`

.
It creates a double-precision vector of the specified length with each
element equal to `0`

.

`as.numeric`

is a generic function, but S3 methods must be
written for `as.double`

. It is identical to `as.double`

.

`is.numeric`

is an internal generic `primitive`

function: you can write methods to handle specific classes of objects,
see InternalMethods. It is **not** the same as
`is.double`

. Factors are handled by the default method,
and there are methods for classes `"Date"`

,
`"POSIXt"`

and `"difftime"`

(all of which
return false). Methods for `is.numeric`

should only return true
if the base type of the class is `double`

or `integer`

*and* values can reasonably be regarded as numeric
(e.g., arithmetic on them makes sense, and comparison should be done
via the base type).

### Value

for `numeric`

and `as.numeric`

see `double`

.

The default method for `is.numeric`

returns `TRUE`

if its argument is of mode `"numeric"`

(type `"double"`

or type `"integer"`

) and not a
factor, and `FALSE`

otherwise. That is,
`is.integer(x) || is.double(x)`

, or
`(mode(x) == "numeric") && !is.factor(x)`

.

### Warning

If `x`

is a `factor`

, `as.numeric`

will return
the underlying numeric (integer) representation, which is often
meaningless as it may not correspond to the `factor`

`levels`

, see the ‘Warning’ section in
`factor`

(and the 2nd example below).

### S4 methods

`as.numeric`

and `is.numeric`

are internally S4 generic and
so methods can be set for them *via* `setMethod`

.

To ensure that `as.numeric`

and `as.double`

remain identical, S4 methods can only be set for `as.numeric`

.

### Note on names

It is a historical anomaly that **R** has two names for its
floating-point vectors, `double`

and `numeric`

(and formerly had `real`

).

`double`

is the name of the type.
`numeric`

is the name of the mode and also of the implicit
class. As an S4 formal class, use `"numeric"`

.

The potential confusion is that **R** has used *mode*
`"numeric"`

to mean ‘double or integer’, which conflicts
with the S4 usage. Thus `is.numeric`

tests the mode, not the
class, but `as.numeric`

(which is identical to `as.double`

)
coerces to the class.

### References

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

### See Also

`double`

, `integer`

, `storage.mode`

.

### Examples

```
## Conversion does trim whitespace; non-numeric strings give NA + warning
as.numeric(c("-.1"," 2.7 ","B"))
## Numeric values are sometimes accidentally converted to factors.
## Converting them back to numeric is trickier than you'd expect.
f <- factor(5:10)
as.numeric(f) # not what you might expect, probably not what you want
## what you typically meant and want:
as.numeric(as.character(f))
## the same, considerably more efficient (for long vectors):
as.numeric(levels(f))[f]
```

*base*version 4.4.0 Index]