Range of values in R

Statistics with R Dispersion measures
range() function in R

The range function is used to find the range of a set of numeric or character values, this is, the minimum and maximum values of a numeric vector or the first and last element of a character vector ordered in alphabetical order.

Syntax

The range function in R has the syntax described below:

range(..., # Numeric or character object
      na.rm = FALSE,  # If TRUE, removes missing values
      finite = FALSE) # If TRUE, removes non-finite values

This function returns a vector with two elements, where the first element is the minimum value and the second element is the maximum value.

Range of numeric vector

Given a numeric vector named x you can obtain its range passing the object to the range function.

# Sample numeric vector
x <- c(10, 1, 14, -5, 4)

# Range of 'x'
range(x)

# Equivalent to:
# c(min(x), max(x))
-5 14

The previous code return a two-element vector with -5 (the minimum value) and 14 (the maximum value).

However, if the vector contains NA values the function will return NA NA, as illustrated below.

# Sample numeric vector with a missing value
x <- c(10, 1, 14, NA, -5, 4)

# Range of 'x'
range(x)
NA NA

To solve this issue you will need to set na.rm = TRUE, so missing values will be omitted before the computation.

# Sample numeric vector with a missing value
x <- c(10, 1, 14, NA, -5, 4)

# Range of 'x'
range(x, na.rm = TRUE)
-5 14

The sample vector can also contain non-finite values, such as Inf. In this scenario, the function will take into account these values.

# Sample numeric vector with an Inf value
x <- c(10, 1, 14, Inf, -5, 4)

# Range of 'x'
range(x)
-5 Inf

To remove non-finite values you can set finite = TRUE, so only finite values will be taken into account.

# Sample numeric vector with an Inf value
x <- c(10, 1, 14, Inf, -5, 4)

# Range of 'x'
range(x, finite = TRUE)
-5 14

Range of character vector

The range function also support character vectors. In this case the function will order the values alphabetically and return the first and last element, as illustrated in the example below.

# Sample character vector
y <- c("and", "sand", "band")

# Range of 'y'
range(y)
"and"  "sand"

The function returns "and" and "sand", as these are the first and last element if y is order alphabetically.

Range of a whole data frame or matrix

If a data frame (with homogeneous data types) or matrix is passed as input of range the function will return the range of the values of the whole object.

# Sample data frame
df <- data.frame(x = c(0, 1, 3), y = c(5, 2, 4))

# Range of 'df'
range(df)
0 5

The output is 0 5, as 0 and 5 are the minimum and maximum values between all columns, respectively.

Range for each column of a data frame or matrix

If you want to calculate the range for each column of a data frame or matrix you will need to utilize the apply function as shown in the example below.

# Sample data frame
df <- data.frame(x = c(0, 1, 3), y = c(5, 2, 4))

# Range of each column of 'df'
apply(df, 2, range)
     x y
[1,] 0 2
[2,] 3 5

The range of the column named x is 0 3 and the range of the column named y is 2 5.

The extendrange function

The extendrange function extends the range of a numeric vector by a small percentage on both sides. The default percentage is 0.05.

# Sample numeric vector
x <- c(10, 1, 14, -5, 4)

# Extended range of 'x'
extendrange(x)
-5.95 14.95

In the previous example the range is extended 0.95 because the difference between the maximum and minimum value is 19 and 19 x 0.05 = 0.95.

The fraction can be customized with f, as shown below.

# Sample numeric vector
x <- c(10, 1, 14, -5, 4)

# Extended range of 'x'
extendrange(x, f = 0.01)
-5.19 14.19

In addition, the extended range can be customized for each side, passing a vector with two percentages, being the first the one used on the left and the second the one used on the right.

# Sample numeric vector
x <- c(10, 1, 14, -5, 4)

# Extended range of 'x'
extendrange(x, f = c(0.01, 0.05))
-5.19 14.95