# R - *Vectors*

*Vectors*

Updated at 2017-10-13 14:53

**Vector is a list of values.** When speaking about vectors, you are usually referring atomic vectors. Lists are also vectors, list vectors, that are covered later. Function `c`

(combine) is used to make vectors.

```
c(1, 2, 3)
# [1] 1 2 3
```

**Vectors have a single data type.** All elements must follow it. Elements will be converted to same type when added.

```
c(1, TRUE, "three")
```

**You get vector type with typeof().**

```
numbers <- c(1, 2, 3)
typeof(numbers)
# [1] "integer"
```

**Vectors are flat.**

```
c(1, c(2, c(3, 4)))
# [1] 1 2 3 4
```

**Sequences are shorthands for creating vectors.**

```
c(1, 2, 3, 4)
1:4
# [1] 1 2 3 4
5:9
seq(5, 9)
# [1] 5 6 7 8 9
seq(5, 9, 0.5)
# [1] 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0
9:5
# [1] 9 8 7 6 5
```

**You can get first and last elements with head and tail functions.**

```
v <- seq(1, 20)
head(v)
# [1] 1 2 3 4 5 6
tail(v)
# [1] 15 16 17 18 19 20
tail(v, 2)
# [1] 19 20
```

**Vector access indexing starts from 1.**

```
# Assigning vector to variable.
sentence <- c('walk', 'the', 'plank')
sentence[3]
# [1] "plank"
# Changing an element.
sentence[3] <- "dog"
sentence[3]
# [1] "dog"
# Multipoint access.
sentence[c(1, 3)]
# [1] "walk" "dog"
# Range access.
sentence[2:4]
# [1] "the" "dog" "to"
# Range change.
sentence[5:7] <- c('the', 'poop', 'deck')
```

**You can give names to indexes.**

```
ranks <- 1:3
names(ranks) <- c("first", "second", "third")
ranks
# first second third
# 1 2 3
ranks["first"]
# first
# 1
ranks["third"] <- 333
# Or during creation.
x <- c(first = 1, second = 2, third = 3)
```

**Boolean vectors are useful for filtering vectors.**

```
ships <- c("Blackmoon", "Cherry", "Mondilla", NA)
over.7.chars <- nchar(ships) > 7
ships[over.7.chars]
# [1] "Blackmoon" "Mondilla"
which(over.7.chars)
# [1] "Blackmoon" "Mondilla"
which(is.na(ships), arr.ind=TRUE)
# [1] 4
# Check if all ship names are over 7 characters.
all(nchar(ships) > 7)
# [1] FALSE
# Check if any ship names are exactly 6 characters.
any(nchar(ships) == 6)
# [1] TRUE
```

**Operations applied to a vector is done to each individual elements.**

```
a <- c(1, 2, 3)
a + 1
# [1] 2 3 4
b <- c(4, 5, 6)
a + b
# [1] 5 7 9
a == c(1, 99, 3)
# [1] TRUE FALSE TRUE
a <= c(1, 1, 1)
# [1] TRUE FALSE FALSE
sin(a)
# [1] 0.8414710 0.9092974 0.1411200
```

**Bar plotting vectors.**

```
vesselsSunk <- c(4, 5, 1)
names(vesselsSunk) <- c("England", "France", "Norway")
barplot(vesselsSunk)
```

**Scatter plotting vectors.**

```
x <- seq(1, 20, 0.1)
y <- sin(x)
plot(x, y)
```

`NA`

values are special.

```
# Every function should treat NA (not available) specially.
# sum-function notifies about NA values.
a <- c(1, 3, NA, 7, 9)
sum(a)
# [1] NA
# Supress not available values.
sum(a, na.rm = TRUE)
# [1] 20
```

# Sources

- Google Developers R Programming Videos
- Try R