class: center, middle, inverse, title-slide .title[ # Язык R и его применение в биоинформатике ] .author[ ### Анастасия Жарикова ] .date[ ### 02.09.2022 ] --- <style> html { padding: unset;} body { padding: unset;} </style> # Преподаватели - Жарикова Анастасия Александровна - *azharikova89@gmail.com* - Пензар Дмитрий Дмитриевич - *dmitrypenzar1996@gmail.com* - Валяева Анна Александровна - *valyaeva.ann@gmail.com* ## Где нас найти - Ходите на занятия - Чат ТГ "ФББ 2020, R и алгоритмы" - Комната 633, корпус Б --- # Правила игры - Занятия очные - Ходить можно только со своей группой (или поменяться) - Презентации, домашние задания, дедлайны, ведомость и прочие материалы - на странице курса на kodomo - Структура: + 16 занятий + ~ 10 квизов + ~ 12 домашних заданий + 2 контрольные работы + защита проекта - В курсе будут задачи и вопросы, касающиеся других предметов (например, статистика, молекулярная биология). Считается, что все предметы из прошлых семестров вы усвоили --- # Правила игры - Сохраняйте коды домашних заданий, контрольных работ, квизов, проекта до получения зачета - Задавайте вопросы: на занятии, после занятия, письмами на почту, в телеграмм (групповой чат или в личных сообщениях) - За сутки до дедлайна - день тишины - Можем ИНОГДА двигать дедлайны --- # Правила игры - Квизы - короткие задания на 10-15 минут в начале занятия, обязательно прилагать код - Квизы и контрольные работы не переписываются - В случае пропуска по уважительной причине (справка в учебной части, поездка на конференцию) баллы пересчитываем - Домашние задания являются обязательными - На выполнение домашнего задания отводится не менее 14 дней - После дедлайна домашние задания не принимаются ни в каком виде - Если не ясна формулировка - спрашивайте! - Сдавать домашние задания можно 1 раз только в виде отчета .pdf или .html с демонстрацией кода, загружая отчет в соответствующую форму - Домашние задания нужно присылать на почту преподавателя --- # Правила игры - Задание №0 в каждом домашнем задании - проработать самостоятельно материалы лекции! - При написании кода необходимо использовать полученные знания. При сдаче работающего, но плохого или заведомо неоптимального кода - штраф до 30% от веса задачи - При решении задания, требующего ответа, ответ должен быть сформулирован в явном виде. В противном случае задание не засчитывается - Если в задании требуется прислать файл, то называть его следует по принципу: FBB_R_HW2_Petrov_YYYYMMDD.R (.html,.pdf,...) - Для защиты проекта можно использовать свои данные (предварительно показать преподавателю) или запросить датасет. Утвердить датасеты для проекта необходимо не позднее 2 декабря --- # Почему R? - Бесплатный - Форумы, поддержка, развитие - Быстрая и удобная статистическая обработка данных - Построение красивых графиков - Множество дополнительных пакетов - Обработка данных RNA-seq - Создание отчетов - Некоторые лаборатории используют только R - Еще один инструмент в вашем арсенале --- # Что будет <img src="data:image/png;base64,#img/struct.png" width="100%" style="display: block; margin: auto;" /> --- # R и RStudio - Демонстрация - Язык R - https://cloud.r-project.org/ - RStudio - https://rstudio.com/ ## Где работать? - Можно поставить себе на компьютер - RStudio на kodomo: https://kodomo.fbb.msu.ru/rstudio/ <img src="data:image/png;base64,#img/RStudio.png" width="50%" style="display: block; margin: auto;" /> --- # R - рекомендации к работе - Можно запускать без RStudio - Можно запускать из командной строки - RStudio - настоятельно рекомендуется (особенно на контрольных работах!) - Организуйте свою работу: + Проект + Скрипты file.R + Отчеты file.Rmd - Сохраняйте свой код в виде скриптов file.R (на контрольных работах - это обязательное требование) или file.Rmd - Сохраняйте полученные таблицы и графики в отдельные файлы - Использовать Google можно и нужно! --- # Оформление домашнего задания Должно быть ясно: - кто вы - номер домашнего задания - номер и формулировка задания - код - результат выполнения кода - доказать, что ваш код выдает нужный результат - ответ, если нужно --- # Оформление домашнего задания <img src="data:image/png;base64,#img/hwex.png" width="100%" style="display: block; margin: auto;" /> --- # Полезные команды
getwd() # узнать рабочую директорию setwd(‘Newdir’) # задать рабочую директорию dir() # список файлов в рабочей директории ls() # список переменных в рабочей дирректории sessionInfo() # информация о загруженной сессии R --- count: false # Основной тип данных - вектор .panel1-vec-user[ ```r *x <- 1:5 *x ``` ] .panel2-vec-user[ ``` [1] 1 2 3 4 5 ``` ] --- count: false # Основной тип данных - вектор .panel1-vec-user[ ```r x <- 1:5 x *y <- 6:10 *y ``` ] .panel2-vec-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ] --- count: false # Основной тип данных - вектор .panel1-vec-user[ ```r x <- 1:5 x y <- 6:10 y *length(x) ``` ] .panel2-vec-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 5 ``` ] <style> .panel1-vec-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> Что такое [1]? ```r vec <- 100:120 vec ``` ``` [1] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 [20] 119 120 ``` --- count: false # Операции с векторами .panel1-vec2-user[ ```r *x <- 1:5 *x ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x *y <- 6:10 *y ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y *x + y ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y *x^2 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 *x+3 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 *-x ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 -x *x > 4 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ``` [1] FALSE FALSE FALSE FALSE TRUE ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 -x x > 4 *x == 4 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ``` [1] FALSE FALSE FALSE FALSE TRUE ``` ``` [1] FALSE FALSE FALSE TRUE FALSE ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 -x x > 4 x == 4 *x = 4 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ``` [1] FALSE FALSE FALSE FALSE TRUE ``` ``` [1] FALSE FALSE FALSE TRUE FALSE ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 -x x > 4 x == 4 x = 4 *x ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ``` [1] FALSE FALSE FALSE FALSE TRUE ``` ``` [1] FALSE FALSE FALSE TRUE FALSE ``` ``` [1] 4 ``` ] <style> .panel1-vec2-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec2-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec2-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style>
--- # Операции с векторами ```r x <- 1:5 x ``` ``` [1] 1 2 3 4 5 ``` ```r y <- 1:2 y ``` ``` [1] 1 2 ``` ```r x+y ``` ``` Warning in x + y: longer object length is not a multiple of shorter object length ``` ``` [1] 2 4 4 6 6 ```
--- # Способы создания вектора
## Оператор с() ```r c(1,2,3) ``` ``` [1] 1 2 3 ``` ## Объединение ```r x <- 1:3 x ``` ``` [1] 1 2 3 ``` ```r x <- c(x,5:7) x ``` ``` [1] 1 2 3 5 6 7 ``` --- # Способы создания вектора
## Последовательности ```r 1:10 ``` ``` [1] 1 2 3 4 5 6 7 8 9 10 ``` ```r seq(from=1,to=8,by=2) ``` ``` [1] 1 3 5 7 ``` ## Повторы ```r rep(1:3,times=3) ``` ``` [1] 1 2 3 1 2 3 1 2 3 ``` --- # Способы создания вектора
## Взять 10 случайных чисел от 1 до 30 ```r sample(1:30,10,replace=T) ``` ``` [1] 5 2 18 3 10 15 12 19 16 9 ``` --- # Способы создания вектора
## Нужно сгенерировать заданное количество чисел из известного распределения - rnorm(n,mean,sd) - нормальное распределение - runif(n,min,max) - равномерное распределение - rbinom(n,size,prob) - биномиальное распределение - rpois(n,lambda) - распределение Пуассона ```r set.seed(123) rpois(20,10) ``` ``` [1] 8 9 14 10 10 15 11 5 4 13 11 11 10 8 15 11 3 7 6 8 ``` --- # Описательная статистика
```r set.seed(123) a <- rpois(20,10) sum(a) ``` ``` [1] 189 ``` ```r sd(a) ``` ``` [1] 3.410124 ``` ```r max(a) ``` ``` [1] 15 ``` ```r mean(a) ``` ``` [1] 9.45 ``` --- # Справки и помощь
- ?seq - help(seq) - example(seq)