---
title: "Основы программирования в R"
author: "Алла Тамбовцева"
output:
  pdf_document:
    latex_engine: xelatex
mainfont: CMU Serif
header-includes:
- \usepackage[russian]{babel}
- \usepackage{hyperref}
- \hypersetup{colorlinks = true, urlcolor = blue, linkcolor=magenta}
---
# Практикум 2: векторы, матрицы, списки

### Задача 1

Создайте матрицу размерности $3 \times 4$, состоящую из 3, а затем измените некоторые её элементы так, чтобы получить следующее:

```
[3 3 4 3]
[1 3 3 3]
[3 NA 3 1]
```
### Задача 2

Создайте из векторов `a`, `b`, `c` матрицу, такую, что:

* векторы являются столбцами матрицы;
* векторы являются строками матрицы.

Векторы: 

```{r}
a <- c(1, 3, 4, 9, NA)
b <- c(5, 6, 7, 0, 2)
c <- c(9, 10, 13, 1, 20)
```

Дайте новые названия строкам и столбцам матрицы.

### Задача 3

Может ли матрица состоять из элементов разных типов? 
Проверьте: составьте матрицу из следующих векторов (векторы записаны как столбцы матрицы):

```{r}
names <- c("Jane", "Michael", "Mary", "George")
ages <- c(8, 6, 28, 45)
gender <- c(0, 1, 0, 1)
```

Если получилось не то, что хотелось, подумайте, как это можно исправить, не теряя информации, которая сохранена в векторах. Добавьте в матрицу столбец `age_sq` -- возраст в квадрате. 

### Задача 4

Создайте из векторов из задачи 3 список (*list*) и назовите его `info`.

* Обращаясь к элементам списка, выведите на экран имя Michael.

* Обращаясь к элементам списка, выведите на экран вектор `gender`.

* Назовите векторы в списке `Name`, `Age`, `Gender`. Выведите на экран элементы вектора `Name`.

* Добавьте в список вектор `drinks`, в котором сохранены значения: juice, tea, rum, coffee.

* Добавьте в список данные по еще одному человеку: John, 2 года, мужской пол, любит молоко.

### Задача 5

В R есть функция `strsplit()`, которая позволяет разбивать строки на части по определенным символам (аналог метода `.split()` в Python).

Пусть у нас есть строка `s`:

```{r}
s <- "a,b,c,d"
```
Мы хотим получить из неё вектор из 6 букв. Применям функцию:

```{r}
let <- strsplit(s, ",")
```

Получили почти то, что хотели. Почему почти? Потому что получили не вектор, а список!

```{r}
class(let)
## [1] "list"
```

Превратим в вектор:

```{r}
unlist(let)
## [1] "a" "b" "c" "d"
```

Теперь всё в порядке, получили вектор из четырех элементов.

Теперь задание. Дана строка `index`:

```{r}
index <- "0,72;0,38;0,99;0,81;0,15;0,22;0,16;0,4;0,24"
```
Получите из этой строки числовой вектор `I`.