---
title: "Основы программирования в R"
subtitle: "R как калькулятор, переменные и типы переменных в 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 как калькулятор

Сложение, умножение, деление:

```{r}
12 + 18 
```

```{r}
5 * 3
```

```{r}
5 / 8
```

Возведение в степень (два способоа):

```{r}
7 ^ 2
```

```{r}
7 ** 2
```

Квадратный корень:

```{r}
sqrt(16)
sqrt(24)
```

Корень произвольной степени:

```{r}
16 ^ (1/4)
```

Округление до целого числа:

```{r}
round(5.5)
```

Округление до произвольного знака после запятой (в примере — до первого):

```{r}
round(5.56, 1)
```

Математические константы $\pi$ и $e$:

```{r}
pi
```

```{r}
exp(1)
```

Натуральный логарифм: 

```{r}
log(100)
```

Десятичный логарифм:

```{r}
log10(100)
```

Логарифм по произвольному основанию `base`:

```{r}
log(100, base = 4)
```

## Переменные в R

Названия переменных в R могут содержать буквы, цифры, точки и знаки подчёркивания, при этом название переменной не может начинаться с цифры. Название переменной не должно совпадать со служебными словами (операторами) в R: `if`, `else`, `for`, `while` и другимим.

Оба оператора `<-` и `=` используются для присваивания, но `<-` является общепринятым в R, и знак `=` для присваивания в хорошем коде и официальных тьюотриалах мы не увидим.

```{r}
age.1 <- 26
age.1
```

Иногда оператор `<-` «переворачивают» и превращают в `->`, но вообще в программировании принято, чтобы переменная стояла слева, а присваимое значение — справа, поэтому такое можно увидеть довольно редко:

```{r}
2 -> x
```

Мы можем изменить значение переменной и сохранить её под тем же именем:

```{r}
x <- x + 1
x
```

## Типы переменных

Основными типами переменных в R являются:

* числовой (`numeric`);
* целочисленный (`integer`);
* текстовый (`character`);
* логический (`logical`) - только два значения: `TRUE` и `FALSE`.

**Важно:** В дробных числах в R в качестве разделителя используется точка.

Создадим переменную `x1` и присвоим ей значение 9.5.

```{r}
x1 <- 9.5
```

Проверим, является ли `x1` числом:

```{r}
is.numeric(x1)  # yes
```

Проверим, является ли `x1` целым числом:

```{r}
is.integer(x1)  # no
```

Аналогичным образом после префикса `is.` можем поставить `character`  и  `logical`.

Создадим переменную `x2`:

```{r}
x2 <- "welcome"
```

Узнаем, какого она типа:

```{r}
class(x2)
```

Узнаем более конкретный тип:

```{r}
typeof(x2)
```

**Важно.** Если забыли, что делает та или иная функция, можно спросить это у R:

```{r, eval=FALSE}
?class
```

```{r, eval=FALSE}
help(class)
```

Тип переменной можно менять — выполнять приведение типов. Например, превратим строку "2" в число 2:

```{r}
two <- "2"
as.numeric(two)
```

Логические переменные легко превращаются в числовые:

```{r}
u <- TRUE
e <- FALSE
```

```{r}
as.numeric(u)
as.numeric(e)
```

Конечно, не у любой переменной мы можем поменять тип. Например, строку "abc" превратить в число не получится:

```{r}
as.numeric("abc")
```

## Числовые переменные

С числовыми переменными можно делать то же, что и с числами:

```{r}
a <- 25
b <- 15
sum_ab <- a + b
sum_ab
```

```{r}
power_ab <- a ^ b
power_ab
```

Здесь `e` — это число 10. Запись `9.313226e+20` означает, что число 9.313226 надо умножить на $10^{20}$. Если, напротив, R нужно было бы выдать очень маленькое число, 10 стояло бы в отрицательной степени:

```{r}
1 / a ^ b
```

## Tекстовые переменные (строки)

Что можно делать с текстовыми переменными? Например, в текстовых переменных можно заменять одни символы на другие. Для этого существует функция `sub()`. На первом месте указываем, что заменяем, на втором — на что заменяем, на третьем — где заменяем:

```{r}
group <- "group#1 group#2 group#3"
sub("#", "-", group)
```

Однако функция `sub()` позволяет изменить только первое совпадение. Для того, чтобы заменить все встречающиеся в тексте символы, нужно воспользоваться `gsub()`:

```{r}
gsub("#", "_", group)
```

## Логические выражения

Необходимы для проверки или формулировки условий.

```{r}
x <- 2
y <- 10
```

Привычные операции сравнения:

```{r}
x > y
```

```{r}
x < y
```

```{r}
x <= y
```

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

```{r}
x == y
```

Для отрицания равенства используется оператор `!=`:

```{r}
x != y
```

Для проверки одновременного выполнения условий используется оператор `&` (аналог `and` в Python):

```{r}
x & y < 5
```

Для проверки выполнения хотя бы одного условия используется оператор `|` (аналог `or` в Python):

```{r}
x | y < 5
```

Для проверки выполнения ровно одного условия используется функция `xor()`, так как в R нет соответствующего оператора:

```{r}
xor(x < 5, y < 5)
```

Чтобы заметить разницу между операциями «хотя бы одно верно» и «ровно одно верно», изменим значение `y` так, чтобы оба условия `x < 5` и `y < 5` были верными:

```{r}
y <- 3
```

Теперь «хотя бы одно верно» истинно (оба верны), а «ровно одно верно» ложно (более одного верно):

```{r}
x | y < 5
xor(x < 5, y < 5)
```

