# 01. Vector Types and Declarations in R

Let's dive into how R stores and views data with its most primitive data type - vectors.

## Types

Vectors hold a certain type of values.

### No declarations needed!

In strongly-typed language such as Java or C, you must declare the type of each variable (this is known as strongly typed. However, R is a loosely typed language, meaning you may assign values without declaring its type.

As shown below, there is no need to declare a vector type for either a string or numeric vector.

``````> x <- 4
# A numeric vector
> s <- "hello world!"
# A string vector``````

### Checking Types

To check the types of a vector, you can use the `mode()` function.

``````> mode(x)
 "numeric"
> mode(s)
 "character"``````

### `NA` and `NULL`

Vectors are able to take on the values `NA` and `NULL`. Both indicate that the value is missing, but both have a clear distinction. `NA` indicates that the data could have some value, which is unknown. `NULL`, on the other hand, indicates that the data simply doesn't exist.

For example, a sample subject could have a variable "Gender" `NA`, meaning that it is present, but unknown. However, if there were a follow-up variable such as "Son's name," when the subject has no children, the parameter here can be `NULL`, indicating that the value simply does not exist.

Another important distinction is that some functions cannot be performed with an `NA` value. If the value is `NULL`, however, it treats the variable as if it didn't exist in the vector.

``````> x <- c(1,2,3,NA,5,6)
> mean(x)
NA
> x <- c(1,2,3,NULL,5,6)
> mean(x)
3.4``````

The type of `NA` or `NULL` is dependent on the types of the other vector variables.

``````> x <- c("hello", "hi", NULL)
> mode(x)
 "character"
> y <- c(1, 2, 3, NA)
> mode(y)
 "numeric"``````

## Creating a multi-valued vector

To instantiate an empty multi-valued vector, you can use the `vector(length=5)` function.

``````> x <- vector(length=5)
> x
 FALSE FALSE FALSE FALSE FALSE``````

To check the length of any existing vector using the `length()` function.

``````> length(x)
 5``````

Instead of instantiating an empty vector, you can jump straight to assigning variables in each of its slots. Simply use the `c()` function (short for contatenation).

``````> v <- c("abc", 123)
> v
 "abc" "123"``````

Notice one thing here - all values are stored as one type. Thus, even though we inputted the numeric type `123`, R converts it to the character-array `"123"` instead. This brings us to the point that R vectors can only have one certain type.

``````> mode(v)
 "character"``````

## Accessing vectors by index

Each element in a vector may be accessed by its index value. Indicies start at 1, which is different from most programming languages, whose first indices start at 0.

``````> s <- c(1,2,3,4)
> s
 1
> s
 3
> s <- 20
> s
 1 2 3 20
> s
 NA
> s <- 24
 1 2 3 20 24
> s <- 32
 1 2 3 20 24 NA NA 32``````

Notice that R won't error out when we attempt to assign values even with the current vector not long enough. This could either be a good thing or a bad thing, depending on whether you know exactly what you're doing.

### Specifying multiple indices

You can also pull out specific indicies by using a vector. A partial listing of a vector is known as a subvector.

``````> x <- c(1,2,3,4,5,6)
> x[c(1,3,5)]
 1 3 5``````

Note that you can index a value multiple times.

``````> x[c(1,1,1,1)]
 1 1 1 1 ``````

### Excluding items

To pull out items besides specific ones, use the `-` key.

``````> x <- c(1,2,3,4,5,6)
> x[c(-3,-4)]
 1 2 5 6 ``````

## Naming Vector Elements

To name the vector elements, we can use the `names()` function

``````> x <- c(97, 84, 85)
> names(x) < c("Sarah", "Mickey", "Jessica")
> x
Sarah  Mickey Jessica
97      84      85``````

### Become a Bioinformatics Whiz!

#### Bioinformatics Data Skills Learn the best practices used by academic and industry professionals. Bioinformatics Data Skills give a great overview to the Linux Command Line, Github, and other essential tools used in the trade. This book bridges the gap between knowing a few programming languages and being able to utilize the tools to analyze large amounts of biological data.

\$ Check price (7+ reviews)

### Learn to be a Pythonista!

#### Python Playground Python Playground is a collection of fun programming projects that will inspire you to new heights. You'll manipulate images, build simulations, and interact with hardware using Arduino & Raspberry Pi. With each project, you'll get familiarized with leveraging external libraries for specialized tasks, breaking problems into smaller, solvable pieces, and translating algorithms into code.

\$ Check price (14+ reviews)