# Creating, Subsetting, and Vectorization in R

### Creating Vectors in R Using c() Function

The c() function can be used to create vectors of objects. This function concatenates the values having one dimension (either row or column matrix in a sense). The following are some examples related to creating different types of vectors in R.

# Numeric vector
x <- c(1, 2, 5, 0.5, 10, 20, pi)

# Logical vector
x <- c(TRUE, FALSE, FALSE, T, T, F)

# Character vector
x <- c("a", "z", "good", "bad", "null hypothesis")

# Integer vector
x <- 9 : 29   # (colon operator is used)
x <- c(1L, 5L, 0L, 15L)

# Complex vector
x <- c(1+0i, 2+4i, 0+0i)

### Using vector() Function

Creates a vector of $n$ elements with a default value of zero for numeric vector, an empty string for character vector, FALSE for logical vector, and 0+0i for complex vector.

# Numeric vector of lenght 10 (default is zero)
x <- vector("numeric", length = 10)

# Integer vector of length 10 (default is integer zeros)
x <- vector("integer", length = 10)

# Character vector of length 10 (default is empty string)
x <- vector("character", length = 10)

# Logical vector of length 10 (default is FALSE)
x <- vector("logical", length = 10)

# Complex vector of length 10 (default is 0+0i)
x<- vector("complex", length=10)

### Creating Vectors with Mixed objects

When different objects are mixed in a vector, coercion occurs, that is, the data type of vector changes intelligently.

The following are examples

# coerce to character vector
y <- c(1.2, "good")
y <- c("a", T)

# coerce to a numeric vector
y <- c(T, 2)

From the above examples, the coercion will make each element of the vector of the same class.

### Explicitly Coercing Objects to Other Class

Objects can be explicitly coerced from one class to another class using as.character(), as.numeric(), as.integer(), as.complex(), and as.logical() functions. For example;

x <- 0:6
as.numeric(x)
as.logical(x)
as.character(x)
as.complex(x)

Note that non-sensual coercion results in NAs (missing values). For example,

x <- c("a", "b", "c")
as.numeric(x)
as.logical(x)
as.complex(x)
as.integer(x)

### Vectorization in R

Many operations in R Language are vectorized. The operations ( +, -, *, and / ) are performed element by element. For example,

x <- 1 : 4
y <- 6 : 9
x + y
x - y
x * y
x / y
x >= 2
x < 3
y == 8

Without vectorization (as in other languages) one has to use for loop for performing element by element operation on say vectors.

### Subsetting Vectors in R Language

By subsetting vectors means that extracting the elements of a vector. For this purpose square brackets ([ ]) are used. For example;

x <- c(1, 6, 10, -15, 0, 13, 5, 2, 10, 9)

# Subsetting  Examples
x[1]   # extract first element of x vecotr
x[1:5] # extract first five values of x
x[-1]  # extract all values except first
x[x > 2] # extracts all elements that are greater than 2
head(x)  # extracts first 6 elements of x
tail(x)  # extracts last 6 elements of x

x[x > 5 & x < 10]  # extracts elements that are greater than 5 but less than 10

One can use subset() function to extract the desired element using logical operators, For example,

subset(x, x > 5)
subset(x, x > 5 & x < 10)
subset(x, !x < 0 )