--- 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) ```