Язык R

и его применение в биоинформатике

Лекция 1

Анастасия Жарикова

6 сентября 2024

Общая информация

Преподаватели

  • Жарикова Анастасия Александровна

    azharikova89@gmail.com

  • Валяева Анна Александровна

    valyaeva.ann@gmail.com

  • Никольская Арина Игоревна

    arnikol31@gmail.com

Где нас найти

  • Ходите на занятия

  • Общий чат ТГ

  • Комната 633, корпус Б

Зачем нас искать

  • Задавать вопросы(!!!!)

    на занятиях (наиболее приемлемый вариант)

    лично очно

    общий чат ТГ

    личные сообщения (если ситуация критическая и больше ничего не помогает)

  • После 21:00 и по выходным (суббота и воскресенье) мы не работаем совсем!

  • За сутки до любого дедлайна - день тишины!

Если вы не задаете вопросы, значит вы все поняли, и мы можем спрашивать материал в полном объеме и усложнять проверочные работы

Что будет

Расписание

17 недель

Активности

  • 17 очных занятий

  • Материалы для самостоятельного изучения

  • Домашние задания

  • Очные проверочные работы на занятии

  • Защита проекта

Все материалы будут выложены на странице курса

Расписание

Занятия очные по пятницам

  • Группа 301, 10:55-12:30, аудитория 442

  • Группа 302, 17:20-18:55, аудитория 207

  • Защита проектов ~ 27 декабря

  • Ходить можно только со своей группой (или поменяться)

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

  • Не ходите на занятия, если болеете!!!

Набираем баллы

Баллы

  • За очные проверочные работы начисляют первичные баллы (ПБ)

  • Первичные баллы пересчитывают во вторичные быллы (ВБ) с учетом веса активности

  • За проект сразу начисляют ВБ

  • Максимум за курс можно получить 100 ВБ

  • Преподаватели могут начислять (и отнимать!) дополнительные баллы за особые достижения

Ценность активностей

  • Очные проверочные работы - 60 ВБ

  • Защита проектов - 40 ВБ

Домашние задания

  • Домашние задания вы делаете для тренировки и в рамках подготовки к самостоятельным работам

  • Проверять домашние задания конечно же никто не будет

  • Если вы столкнетесь с трудностями при выполнении домашних заданий - спрашивайте!

Очные проверочные работы

  • Задания на 20-45 минут во время некоторых занятий

  • По материалам, разобранным на занятии или выданным для домашнего изучения

  • Могут быть внезапными

  • Можно писать только очно в классе

  • Сдавать работы необходимо строго в оговоренное время

  • Очные проверочные работы нужно прикреплять в форму. Убедитесь, что вам пришло письмо об успешной отправке файла

  • Не переписываются совсем никак

  • В случае пропуска по уважительной причине в конце семестра пересчитываем баллы

  • Очные проверочные работы будут полностью проверены к 20 декабря

Проект

  • Проект:

    • нужно поделиться на группы по 4 человека, в крайнем случае - по 3 человека, 5 человек в группе - плохо

    • каждой группе будет выдан набор данных

    • начнем распределять проекты за 4-5 недель до сдачи

    • необходимо проанализировать данные и представить в виде презентации

    • защита проекта проходит в виде доклада на последнем занятии в семестре

Зачет

Зачета не будет

Контрольных и квизов тоже не будет

Как же получить зачет

  • Максимально участвовать в активностях

  • Выполнить 60% всех очных самостоятельных работ

  • Выполнить = отправить в срок корректно оформленную работу в требуемом формате и убедиться, что работа получена

  • Набрать в итоге более 60 ВБ

Когда можно получить зачет

  • Зачет выставляется по результатам работы в семестре

  • Окончательное количество проходных для зачета ВБ будет установлено ПОСЛЕ защиты проектов

  • Допускаем недобор 1 балла, не больше (1.1 - это уже больше, чем 1)

  • Грубые ошибки при защите проекта могут обнулить все ваши старания…

Важно!

  • В курсе будут задачи и вопросы, касающиеся других предметов (например, статистика, молекулярная биология, чтение)

  • Считается, что все предметы из прошлых семестров (и из школы) вы усвоили

  • Мы не повторяем статистику, но спрашиваем!

  • Непонимание материала прошлых семестров считается грубыми ошибками при защите проекта

  • Например, если вы набрали 150 баллов из 100 в течение семестра, но на защите проекта не смогли дать определение p-value или назвать тип графика, который вы же и нарисовали - пересдача

Пересдача

Пересдачи будут

Пересдачи

  • Нужно набрать недостающее количество баллов

  • Подготовить к пересдаче необходимое количество индивидуальных проектов

  • Ответить на теоретические вопросы:

    по R

    по статистике

    по материалу проекта

Допускаем недобор 1 балла, не больше (1.1 - это уже больше, чем 1)

Работа с материалом курса

  • На первом занятии познакомимся с языком R, средой разработки RStudio, основными концепциями

  • На дом вы получите материалы для самостоятельного изучения и домашнее задание

  • На следующем занятии пишем самостоятельную работу по материалам, выданным ранее для самостоятельного изучения

  • На занятии обсуждаем только самые важные и сложные аспекты темы

  • На занятии разбираем примеры повышенной сложности

  • На дом вы получаете материалы для самостоятельного изучения и домашнее задание

и т.д. …

Материалы для самостоятельного изучения

  • Слайды с 🏠

  • Список функций для изучения

  • Отдельная презентация

  • Список внешних источников

Зачем это все

Инструментарий

Набор разных инструментов и навыков делает специалиста по анализу данных более разносторонним и гибким

Интеграция в существующие проекты

Структура курса

R

  • Язык R распространяется бесплатно с открытым исходным кодом

  • Доступно для Linux, macOS, Windows

  • Интерпретируемый язык программирования

  • Обширное сообщество разработчиков и пользователей

RStudio

Интегрированная среда разработки (одна из)

Установка и знакомство

Установка

На свой ноутбук необходимо установить:

  • сначала язык R

  • затем RStudio

https://posit.co/download/rstudio-desktop/

В следующий раз будет самостоятельная работа в RStudio!!!

Нужны ноутбуки!

R и RStudio позволяют

  • оптимально организовать пространство для работы

  • создавать и отлаживать программные сценарии

  • удобно просматривать результаты работы

  • получать справочную информацию

  • работа с данными практически в любых форматах (импорт/экспорт)

Демонстрация

  • Устройство RStudio

  • Организация проектов

  • Создание файлов (.R, .Rmd)

  • Получение справочной информации

RStudio - общий вид 🏠

Программные сценарии

  • Первый шаг к воспроизводимости

  • Можно вводить команды по одной в консоль и выполнять их

  • Все действия будут отражены в вкладке History

  • Как понять, какие команды нам подошли, а какие выдали ошибку или неудовлетворительный результат?

Программные сценарии

  • Лучше сохранять только корректно работающие строки кода в нужной последовательности в файл

  • Нужно добавлять комментарии

  • Вы никогда не забудете, что и как вы делали

  • Получившийся файл всегда можно просмотреть и перезапустить, в том числе с другими параметрами и входными данными

  • Сохраняйте коды домашних заданий, самостоятельных работ, проекта до получения зачета

file.R 🏠

File -> New File -> R Script

  • Код + комментарии

  • Можно использовать в RStudio или запускать из коммандной строки

  • Ctrl + enter - запуск строки кода или выделенного фрагмента кода

“Горячие” клавиши

file.Rmd 🏠

Создание отчета

Можно добавлять

  • форматированный текст

  • формулы

  • таблицы

  • код

  • результат выполнения кода

  • картинки

  • ссылки

file.Rmd

Создание

File -> New File -> R Markdown -> шаблон файла с “шапкой” -> удалить лишнее и добавить нужное -> сохранить -> Knit -> .html/.pdf/.doc

Markdown

Markdown 🏠

  • Текстовый язык разметки

  • Позволяет объединять в одном отчете:

    • код

    • результат анализа данных (таблицы, рисунки, …)

    • комментарии

Markdown: блоки кода

Блок кода записывают в чанки (“chunk”):

  • Запускается целиком или по чанкам, сразу видны ошибки и проблемы

  • Переменные и функции, инициализированные в одном chunk, будут работать во всей сессии

Markdown 🏠

основные настройки

Устанавливаем TRUE или FALSE

{r echo = T}

  • echo - демонстрация кода

  • eval - выполнение кода

  • message и warnings - демонстрация предупреждений

Markdown: ошибки

В случае ошибки в коде итоговый документ не будет создан, появится сообщение об ошибке

Читаем ошибку - исправляем - перезапускаем

Markdown - почитать 🏠

Markdown в R

Markdown в R - reference

Оформление решений

Демонстрация решений

Задание №1

Создайте вектор а из чисел 1, 5 и 8. Добавьте к каждому числу единицу. Положите результат в вектор b.

Хорошо:

Иванов Иван

15 мартобря 2024 - R - ФББ МГУ

Проверочная работа №315

Задание №1

Создайте вектор а из чисел 1, 5 и 8. Добавьте к каждому числу единицу. Положите результат в вектор b.

a <- c(1, 5, 8) # создаем вектор
a # показываем, что вектор создан и лежит в переменной a
[1] 1 5 8
b <- a + 1 # прибавляем к значениям вектора а единицу
b # показываем, как выглядит вектор b
[1] 2 6 9

Плохо:

a <- c(1, 5, 8)
b <- a + 1

Вопрос

Задание: прочитайте таблицу, отберите из нее 1000 строк

Как продемонстрировать корректность вашего решения?

Не проверяем

  • неопознанные файлы: фамилия, номер и тип задания должны быть в названии файла И в “шапке” документа

  • неполное содержание файла:

    • нет номера задания

    • нет формулировок и номеров заданий

    • нет демонстрации решения (!!!)

  • решения, присланные после дедлайнов

Штрафы

  • за оформление: нет структуры файла (заголовки)

  • некорректная демонстрация решения

  • неверное или неполное решение

  • неоптимальное решение

Проверяйте, что итоговый файл сгенерился правильно и его можно прочитать

Списывание

При обнаружении списывания задание обнуляется всем участникам, не разбираясь

Начисляются дополнительные штрафы

Давайте уже R!

С чем мы работаем и где находимся?

getwd() # узнать рабочую директорию

setwd("path/to/Newdir") # задать рабочую директорию

dir() # список файлов в рабочей директории

dir.create("New_dir") # создать директорию New_dir

dir.exists("Dir") # проверить, существует ли директория Dir

unlink("Dir", recursive = T) # удалить директорию Dir

file.exists("file.txt") # проверить, существует ли файл file.txt

file.remove("file.txt") # удалить файл file.txt

sessionInfo() # информация о загруженной сессии R

Информация о загруженной сессии R

Знать версии программ и пакетов необходимо для возможности воспроизведения результатов

sessionInfo()
R version 4.3.2 (2023-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19045)

Matrix products: default


locale:
[1] LC_COLLATE=Russian_Russia.utf8  LC_CTYPE=Russian_Russia.utf8   
[3] LC_MONETARY=Russian_Russia.utf8 LC_NUMERIC=C                   
[5] LC_TIME=Russian_Russia.utf8    

time zone: Europe/Moscow
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] calendR_1.2

loaded via a namespace (and not attached):
 [1] gtable_0.3.4       jsonlite_1.8.8     dplyr_1.1.4        compiler_4.3.2    
 [5] Rcpp_1.0.12        tidyselect_1.2.0   magick_2.8.3       gridGraphics_0.5-1
 [9] ggimage_0.3.3      ggplotify_0.1.2    ggfun_0.1.4        scales_1.3.0      
[13] yaml_2.3.8         fastmap_1.1.1      ggplot2_3.5.0      R6_2.5.1          
[17] generics_0.1.3     knitr_1.45         yulab.utils_0.1.4  htmlwidgets_1.6.4 
[21] gggibbous_0.1.1    forcats_1.0.0      tibble_3.2.1       munsell_0.5.0     
[25] lubridate_1.9.3    pillar_1.9.0       rlang_1.1.2        utf8_1.2.4        
[29] cachem_1.0.8       xfun_0.42          fs_1.6.3           timechange_0.2.0  
[33] memoise_2.0.1      cli_3.6.1          withr_3.0.0        magrittr_2.0.3    
[37] digest_0.6.34      grid_4.3.2         rstudioapi_0.15.0  lifecycle_1.0.4   
[41] vctrs_0.6.4        data.table_1.15.0  evaluate_0.23      glue_1.6.2        
[45] farver_2.1.1       suncalc_0.5.1      fansi_1.0.5        colorspace_2.1-0  
[49] rmarkdown_2.26     tools_4.3.2        pkgconfig_2.0.3    htmltools_0.5.7   

Справки и помощь

  • ?seq
  • help(seq)
  • example(seq)

Cheat Sheets

Таблицы и вектора

Таблица

Вектор

Основной тип данных

Индексация начинается с 1!!!

Работа с векторами

x <- 1:5 
x 
[1] 1 2 3 4 5
length(x)
[1] 5
3 # это тоже вектор длины 1
[1] 3
z <- c("a", "b", "d") # тоже вектор, только строковый
z 
[1] "a" "b" "d"

Внимание!

При перезаписывании содержимого переменной никаких предупреждений не будет

x <- 2 
x
[1] 2
x <- 5 
x
[1] 5

Будьте внимательны при выборе имен для переменных

Индексация 🏠

Индексация элементов в R начинается с 1 (не с 0)

x <- 15:50 
x 
 [1] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
[26] 40 41 42 43 44 45 46 47 48 49 50

Вектор - данные одного типа 🏠

x <- c(0.5, 1.2, 3.6) # точка - разделитель разрядов
typeof(x) # double or numeric
[1] "double"
x <- c(5, 2, 3)
typeof(x) # double
[1] "double"
x <- 1:5
typeof(x) # integer  
[1] "integer"
x <- c(T,F,F,T) 
typeof(x) # logical  
[1] "logical"
x <- c('a','b','c')
typeof(x) # character 
[1] "character"

Таблица

Где тут вектора?

Имена элементов вектора

x <- 1:3 
x 
[1] 1 2 3
names(x)
NULL
names(x) <- c('a', 'b', 'c') 
x 
a b c 
1 2 3 
names(x) 
[1] "a" "b" "c"

Вектора 🏠

У каждого элемента вектора есть:

  • значение

  • индекс или порядковый номер

  • имя (может быть пустым)

Операции с векторами

x <- c(2, 7, 3, 1)
x + 4
[1]  6 11  7  5

Операции с векторами

x <- c(2, 7, 3, 1)
y <- c(3, 2, 5, 6)
x + y
[1] 5 9 8 7

Операции с векторами

x <- c(2, 7, 3, 1)
y <- c(3, 2)
x + y
[1] 5 9 6 3

Срезы: по индексам

x <- c(5, 16, 8, 32, 56, 2) 
x 
[1]  5 16  8 32 56  2
x[1]  # взять 1ый элемент 
[1] 5
x[2:4] # взять с 2го по 4ый элементы 
[1] 16  8 32
x[c(2, 5)] # взять 2ой и 5ый элементы 
[1] 16 56
x[-1] # без первого элемента 
[1] 16  8 32 56  2

Срезы: по индексам

x > 10  
[1] FALSE  TRUE FALSE  TRUE  TRUE FALSE
x[x > 10] # отобрать элементы больше 10 
[1] 16 32 56
x[x >= 5 & x < 10] # отобрать элементы больше или равные 5 И меньше 10 
[1] 5 8
x[x >= 5 | x < 10] # отобрать элементы больше или равные 5 ИЛИ меньше 10 
[1]  5 16  8 32 56  2
x[2] <- 100 # заменить второй элемент вектора на 100

Срезы: по именам 🏠

x <- c(5,16,8,32,56,2) 
names(x) <- paste('v', 1:length(x), sep = '')
x 
v1 v2 v3 v4 v5 v6 
 5 16  8 32 56  2 
x['v3']  # взять элемент вектора х с именем v3 
v3 
 8 
x[c('v1', 'v3')] 
v1 v3 
 5  8 
x[c(1, 3)] 
v1 v3 
 5  8 

Работа с переменными

Работа с переменными

ls() # список переменных из глобального окружения
rm(a, b) # удалить переменные a и b

rm(list=ls()) # удалить все переменные из глобального окружения

Названия переменных

НЕ должны:

  • начинаться с цифр

  • содержать пробелы

  • содержать специальные символы (+, -, /, , *, ^, …)

  • состоять из разезервированных слов (if, else, repeat, while, function, for, in, next, break, TRUE, FALSE, NULL, Inf, NaN, NA, …)

Data Frame

Кадры данных или данные табличного вида

Data frame

Создание

a <- c(5,4,8)
b <- c('a','b','c')
h <- c(T,F,T) 
g <- c(1.5,2.5,3.7) 
df <- data.frame(a,b,h)
df
  a b     h
1 5 a  TRUE
2 4 b FALSE
3 8 c  TRUE



df <- data.frame(a = c(5,4,8),
                 b = c('a','b','c'),
                 h = c(T,F,T),
                 g = c(1.5,2.5,3.7))
df
  a b     h   g
1 5 a  TRUE 1.5
2 4 b FALSE 2.5
3 8 c  TRUE 3.7

Встроенные наборы данных

data()


?swiss

swiss

head(swiss,4)
             Fertility Agriculture Examination Education Catholic
Courtelary        80.2        17.0          15        12     9.96
Delemont          83.1        45.1           6         9    84.84
Franches-Mnt      92.5        39.7           5         5    93.40
Moutier           85.8        36.5          12         7    33.77
             Infant.Mortality
Courtelary               22.2
Delemont                 22.2
Franches-Mnt             20.2
Moutier                  20.3
str(swiss)
'data.frame':   47 obs. of  6 variables:
 $ Fertility       : num  80.2 83.1 92.5 85.8 76.9 76.1 83.8 92.4 82.4 82.9 ...
 $ Agriculture     : num  17 45.1 39.7 36.5 43.5 35.3 70.2 67.8 53.3 45.2 ...
 $ Examination     : int  15 6 5 12 17 9 16 14 12 16 ...
 $ Education       : int  12 9 5 7 15 7 7 8 7 13 ...
 $ Catholic        : num  9.96 84.84 93.4 33.77 5.16 ...
 $ Infant.Mortality: num  22.2 22.2 20.2 20.3 20.6 26.6 23.6 24.9 21 24.4 ...

swiss

Обращение к столбцу

colnames(swiss)
[1] "Fertility"        "Agriculture"      "Examination"      "Education"       
[5] "Catholic"         "Infant.Mortality"
swiss$Education
 [1] 12  9  5  7 15  7  7  8  7 13  6 12  7 12  5  2  8 28 20  9 10  3 12  6  1
[26]  8  3 10 19  8  2  6  2  6  3  9  3 13 12 11 13 32  7  7 53 29 29

Data frame

Срезы

dim(swiss)
[1] 47  6
head(swiss,2)
           Fertility Agriculture Examination Education Catholic
Courtelary      80.2        17.0          15        12     9.96
Delemont        83.1        45.1           6         9    84.84
           Infant.Mortality
Courtelary             22.2
Delemont               22.2
swiss[3,6] 
[1] 20.2

Data frame

Выбор данных по условию

swiss[swiss$Fertility > 40 & swiss$Education < 8,]
             Fertility Agriculture Examination Education Catholic
Franches-Mnt      92.5        39.7           5         5    93.40
Moutier           85.8        36.5          12         7    33.77
Porrentruy        76.1        35.3           9         7    90.57
Broye             83.8        70.2          16         7    92.85
Gruyere           82.4        53.3          12         7    97.67
Veveyse           87.1        64.5          14         6    98.61
Aubonne           66.9        67.5          14         7     2.27
Cossonay          61.7        69.3          22         5     2.82
Echallens         68.3        72.6          18         2    24.20
Moudon            65.0        55.1          14         3     4.52
Orbe              57.4        54.1          20         6     4.20
Oron              72.5        71.2          12         1     2.40
Paysd'enhaut      72.0        63.5           6         3     2.56
Conthey           75.5        85.9           3         2    99.71
Entremont         69.3        84.9           7         6    99.68
Herens            77.3        89.7           5         2   100.00
Martigwy          70.5        78.2          12         6    98.96
Monthey           79.4        64.9           7         3    98.22
Sierre            92.2        84.6           3         3    99.46
Val de Ruz        77.6        37.6          15         7     4.97
ValdeTravers      67.6        18.7          25         7     8.65
             Infant.Mortality
Franches-Mnt             20.2
Moutier                  20.3
Porrentruy               26.6
Broye                    23.6
Gruyere                  21.0
Veveyse                  24.5
Aubonne                  19.1
Cossonay                 18.7
Echallens                21.2
Moudon                   22.4
Orbe                     15.3
Oron                     21.0
Paysd'enhaut             18.0
Conthey                  15.1
Entremont                19.8
Herens                   18.3
Martigwy                 19.4
Monthey                  20.2
Sierre                   16.3
Val de Ruz               20.0
ValdeTravers             19.5

Матрицы

Что такое матрица?

x <- 1:6
dim(x)
NULL

Что такое матрица?

x <- c(20:31)
m <- matrix(x, nrow = 3)
colnames(m) <- c('a', 'b', 'c', 'd')
rownames(m) <- c(1, 2, 3)
dim(m) # 2 строки и 3 столбца
[1] 3 4

Матрицы

  • Внешне похожи на таблицу

  • Вектор с атрибутом dim

  • Все элементы одного типа

  • Математические операции работают быстрее

Конец!