---
title: "Основы программирования в R"
subtitle: "Матрицы в R"
author: "Алла Тамбовцева, НИУ ВШЭ"
output:
  pdf_document:
    latex_engine: xelatex
    toc: true
mainfont: CMU Serif
header-includes:
- \usepackage[russian]{babel}
- \usepackage{hyperref}
- \hypersetup{colorlinks = true, urlcolor = blue, linkcolor=magenta}
---

## Создание матрицы

Матрицы в R можно создавать разными способами. Выбор способа зависит от того, какую матрицу мы хотим создать: пустую матрицу (чтобы потом заполнять её нужными значениями) или матрицу, составленную из уже имеющихся значений, например, из векторов.

Для того чтобы создать пустую матрицу, нужно определить, матрицу какой размерности мы хотим. Размерность матрицы – число строк и число столбцов в ней. Создадим для начала матрицу $2 \times 3$, состоящую из нулей:

```{r}
M <- matrix(0, nrow = 2, ncol = 3)
M
```

Можем посмотреть на её размерность:

```{r}
dim(M)
```

Или вывести число строк и столбцов отдельно:

```{r}
nrow(M)
ncol(M)
```

Заполнять эту матрицу другими значениями мы пока не будем – это будет интереснее делать, когда мы узнаем про циклы. А сейчас посмотрим, как собрать матрицу из «готовых» векторов. Пусть у нас есть три вектора и мы хотим объединить их в матрицу.

```{r}
x <- c(1, 2, 3, 0)
y <- c(4, 5, 6, 0)
z <- c(7, 8, 9, 0)
```

Чтобы сделать векторы столбцами матрицы, нам понадобится функция `cbind()` (*c* — от *columns*):

```{r}
M_cols <- cbind(x, y, z)
M_cols
```

Чтобы сделать векторы строками матрицы, нам понадобится функция `rbind()` (*r* — от *rows*):

```{r}
M_rows <- rbind(x, y, z)
M_rows
```

Другой способ создавать матрицы — разбивать на строки один длинный вектор. Возьмём последовательность чисел от 1 до 12 и запишем их по столбцам в матрицу 3 на 4:

```{r}
matrix(1:12, nrow = 3, ncol = 4)
```

Если мы хотим записать значения по строкам, нам пригодится аргумент `byrow`:

```{r}
m1 <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
m1
```

А теперь давайте добавим названия строкам и столбцам матрицы. Но перед этим посмотрим на встроенные в R векторы из английских букв, строчных и заглавных:

```{r}
letters
```

```{r}
LETTERS
```

Воспользовавшись этими векторами, выберем первые несколько букв и запишем их в названия строк и столбцов матрицы `m1`:

```{r}
rownames(m1) <- letters[1:3]
m1  
```

```{r}
colnames(m1) <- LETTERS[1:4] 
m1 
```

## Работа с элементами матрицы

Для того, чтобы обратиться к элементу матрицы, необходимо указать строку и столбец, на пересечении которых он находится:

```{r}
m1[1, 2]
```

Если нам нужна отдельная строка (одна строка, все столбцы), то номер столбца нужно не указывать, просто оставить позицию пустой:

```{r}
m1[1, ]
```

Аналогично для столбцов:

```{r}
m1[, 3]
```

Если нас интересуют сразу несколько строк или столбцов, их индексы можно перечислить в виде вектора:

```{r}
m1[c(1, 2), 1]
m1[c(2, 3), c(2, 3)]
```

