SexOnR–02_R&other. R, RStudio, RMarkdown — перші кроки (R-довідник I)

 

«Секс на R»
Онлайн-матеріали до курсу «Еволюція сексу і статевих стратегій: імітаційне моделювання на R»

Д.А. Шабанов

Секс на R–01: Ключові поняття курсу: пояснення та посилання (Вступ)

Секс на R–02:
R, RStudio, RMarkdown — перші кроки
(R-довідник I)

Секс на R–03: Типи імітаційних моделей у курсі та їх типова структура

 

02 R, RStudio, RMarkdown — перші кроки

2.1 Деякі посилання

На початку курсу, що присвячений використанню мови R, логічно було б помістити її огляд. Автор сподівається з часом зробити такий огляд, і вибудувати його так, щоб акцент було зроблено саме на цих можливостях і особливостях мови, що важливі для курсу. Поки що цього нема і доведеться знайомитися з цією мовою за допомогою інших джерел.

Українською мовою можна рекомендувати наступне видання (дуже вдале, з дуже концентрованим викладом):

Мaйбoрoдa Р. Є. Кoмп'ютeрнa стaтистикa. К.: ВПЦ «Київський університет», 2019. – 589 с. Ця книга буде для нас основною; на щастя, автор пропонує її для вільного поширення та використання.

Автор цього сайту почав робити огляд мови R в іншому курсі, присвяченому статистичному аналізу. Цей огляд ще потрібно доробляти та вдосконалювати. Ось матеріали, які будуть корисними для даного курсу.
Огляд історії появи мови R і деяких особливостей роботи з нею.
Statistical Oracle — 03. Використання мови R
Statistical Oracle — 04. Робота з даними в R
Statistical Oracle — 07. Короткий огляд команд R
Корисними будуть ще кілька книг, копії яких розташовані на цьому сайті, посилання на які наведені у названому курсі.

Як почати роботу з R? Завантажити інсталятор R тут, інсталювати його на комп'ютер. Після того завантажити Rstudio й інсталювати його. Далі ви будете відкривати вікно RStudio і взаємодіяти з R через його допомогу.

2.2 Вікно RStudio

Запустіть RStudio. Що ви побачите?

Рис. 2.2.1 Ми тільки-но запустили RStudio. Ось що ми побачили

 

Ліва частина екрана RStudio зайнята консоллю — «пристроєм» для вводу та виводу інформації. Після знаку > стоїть курсор. Наберіть там 2*2 і натисніть Enter. Ви бачите, що можете використовувати R у такому режимі, через консоль.

В правій частині екрана RStudio ви бачите два вікна, кожне з яких можна використовувати по-різному, залежно від того, яка закладка там відкрита. Зверху зараз відкрите вікно Environment, де будуть з'являтися об'єкти, з якими працюватиме R. Нижче — вікно Plots, де будуть демонструватися графіки, які будуватиме програма. Зверніть увагу, що межі між вікнами рухливі: ви можете «узяти» їх курсором та переміщувати так, як треба.

Втім, ми будемо працювати не з консоллю, а з вікном скриптів. Відкрийте меню RStudio і запропонуйте створення нового файлу. Ви побачите додаткове меню, де треба буде обрати тип такого файлу.

Рис. 2.2.2 Так відкриваються нові вікна для скриптів та документів RMarkdown

 

Ми будемо працювати з двома типами файлів. Перш за все, це скрипти R (послідовності команд). Такі файли мають розширення *.R. Саме в них ми будемо писати та зберігати моделі, які ми будемо створювати в цьому курсі. Це — набагато краще рішення, ніж робота у консолі. В скрипті можна зібрати достатньо велику послідовність команд, додати до них усі необхідні пояснення. Ці команди можна запускати окремо від інших, чи виконувати усю послідовність як єдине ціле. Під час роботи над удосконаленням моделі можна, наприклад, заблокувати певний рядок від виконання (для цього поставити перед ним «ґратку», #) та дописати якусь альтернативну команду; виконати скрипт з цією альтернативою та порівняти результати. Подивимось, як це працює, на дуже простому прикладі.

2.3 Виконання пробного скрипту

Рис. 2.3.1 Виділена у вікні скриптів послідовність команд була виконана кнопкою Run. Наслідки її виконання ми бачимо в усіх інших вікнах RStudio

 

У вікні скриптів написана дуже проста (і насправді беззмістовна) послідовність команд. Рядки скрипту пронумеровані. Цей скрипт виділили, а потім натиснули розташовану над цим вікном кнопку Run. Ми бачимо результат послідовного виконання наведених команд. Перша з них —арифметичний вираз 2*2. В консолі після знака >, який демонструє, що користувач може ввести туди команду, було введено команду, отриману з вікна скриптів. Далі наведено відповідь системи; він розташований після повідомлення системи з номером наведеного елемента у рядку відповідей: [1]. Навіщо цей номер? Це корисно, коли відповідь складається з кількох елементів, як у випадку команди з рядка 3. Але перед цим слід виконати команду з рядка 2.

У рядку 2 написано: vect <- c(1:20, 100). Цією командою створюється об'єкт під назвою vect (цією назвою ми демонструємо, що базовим типом об'єктів в R є саме вектори — впорядковані послідовності). Створення відбувається так: ми називаємо новий об'єкт і визначаємо його за допомогою команди <-. Цей символ привласнення є дуже характерним для мови R; якщо ви бачите його у програмі, ви зрозумієте, якою мовою вона написана. Щоб ввести цю команду, достатньо нажати на клавіатурі Alt + дефіс (-). Замість цих двох символів можна було б використовувати і =, і навіть (у разі, коли визначення передує назві об'єкта) символи ->. Такі команди спрацюють, але... вони не є широко використовними. Знак рівності використовується в інших сенсах, а при створенні (або перевизначенні вже створених!) об'єктів зручніше, коли рядок починається саме з назви об'єкта.

Яке ж «наповнення» отримує новий об'єкт? Його створює функція c(). Назва функції — скорочення чи то від слова concatenate, чи то від слова combine, і вона поєднує аргументи, які перелічені у дужках через кому. До речі, в R кома не може використовуватися як десятковий роздільник; 1,5 — це не півтора, а 1 та 5 (і це — одна з причин, чому у таких випадках після коми краще ставити пробіл). Так ось, функція c() поєднує результат виконання команди 1:20 та число 100. Що таке 1:20? Це послідовність натуральних чисел від 1 до 20. Важливою особливістю R (і не лише його) є те, що тій самий результат можна отримати багатьма різними способами. Наприклад, послідовність від 1 до 20 можна отримати просто переліком через функцію c() — а саме c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20). Те ж саме можна отримати за допомогою функції seq(). У дужках цієї функції (її назва, як легко здогадатися, походить від sequence) наводяться її аргументи. Цю функцію також можна використовувати по різному. Подивіться на перелік команд R, що наведено тут; ця команда знаходиться у розділі «7.5. Створення об'єктів». Там написано наступне:
seq(from, to, by = ) — генерує послідовність чисел від from до to з кроком by;
seq(from, to, len = ) — генерує послідовність чисел від from до to довжини len.

Таким чином, ту саму послідовність можна створити командами seq(1, 20, by = 1) та seq(1, 20, len = 20). Ви розумієте, що в обох випадках можна задати інший крок арифметичної послідовності, ніж 1. До речі, в цих командах ми можемо побачити інше, ніж у процедурі присвоєння, використання символу =. І ще один спосіб (його названо першим у пункті «7.5. Створення об'єктів») — це просто використання команди :. У показаному на скрині випадку використано саме цей, найпростіший спосіб.

Після того, як ми створили об'єкт vect, RStudio показала в консолі, що отримало цю команду (і якщо отримало і не повідомило про помилку — ми розуміємо, що й виконало!). Втім, відбулася ще одна важлива зміна: як можна побачити на скрині, цей об'єкт з'явився у вікні Environment.

Наступна команда скрипту (рядок 3) називає цей об'єкт. RStudio в консолі показує, що отримало цю команду й у відповідь вивело цей об'єкт у консоль. Тепер ми можемо зрозуміти, навіщо нумерувати елементи у квадратних дужках. У перший рядок вмістилося 16 елементів, а другий починається з елементу № 17.

Лишився 4-й рядок скрипту. Там подано команду ?c. Це — виклик допомоги, що стосується команди c. Ми бачимо, що у правій нижній частині RStudio перемкнулося на вкладку Help і запропонувало огляд команди, щодо якої ми питали.

У людини, яка починає працювати з R, з великою ймовірністю виникає типове питання. Як запам'ятати усі ці команди? Коли ви просунетеся у роботі з цим інструментом далі, ви впевнитеся, що ситуація зовсім не така жахлива, як може здаватися на початку. Найпростіші команди ви швидко запам'ятаєте, адже вам доведеться достатньо часто їх використовувати. З більш складними командами дещо складніше, але у цілому зовсім не трагічно. Важливо, щоб ви або пам'ятали, що якусь проблему можна розв'язати за допомогою якоїсь функції, або хоча б мали на це надію. Далі вам необхідно знайти зразок, зрозуміти, як він працює та переробити його під ваші власні потреби. Спочатку це здається складним, але кожного разу відбувається легше та легше. З часом у вас зберуться написані вами скрипти та їх чернетки, де буде зібрана колекція команд, що потрібні для вирішення ваших задач. Чим далі ви будете просуватися в опануванні R, тим легше вам буде робити наступні кроки.  

 

2.4 Створення документа RMarkdown

RMarkdown — вшита у RStudio мова розмітки тексту. Це — засіб, що дозволяє за допомогою RStudio отримати документ, який може бути перетворений у багато різних форматів, у тому числі — *.pdf, *.html, *.docx тощо. Головна його перевага — можливість вставляти прямо у текст фрагменти R-скриптів та результати їх виконання.

Загалом, фундаментальною особливістю наукового тексту є зосередженість не просто на повідомленні висновків, а й на поясненні, відкіля вони узялися. У разі імітаційного моделювання, статистичного аналізу це означає особливу увагу до параметрів роботи моделей, даних, які аналізувалися, та на особливості використаних алгоритмів. Коли мова йде про наукову статтю, де повідомлюються результати використання R, доводиться шукати непростий компроміс між повнотою тексту та можливості його сприйняття. Іноді доводиться у «тілі» статті повідомляти основні висновки, а у додатках розміщувати безпосередньо текст R-скрипту з коментаріями. У тому ж разі, коли йдеться про навчальні тексти, звіти, кваліфікаційні роботи достатньо часто оптимальне рішення — поєднувати R-код та достатньо детальні коментарі. Краще рішення для цього — RMarkdown. До речі, RMarkdown може буде корисним навіть для тієї людини, яка сама пише R-скрипт, будує R-модель. Пройде час, і ви забудете, чому ви робили так чи інакше. Якщо ви залишите написаний RMarkdown-звіт, ви зможете не лише поясніти вашу логіку комусь іншому; ви зробите її зрозумілою для вас самого у майбутньому!

На рис. 2.2.2 показано, як відкрити новий документ RMarkdown. Він буде збережений з розширенням *.Rmd. 

До речі, під час роботі на комп’ютері з достатньо широким екраном, автор цього тексту любить відкривати у RStudio окрему колонку для документів RMarkdown (рис. 2.4.1). 

Рис. 2.4.1 Пройдіть шляхом опцій у меню RStudio: Tools / Global Options... / Pane Layout / Add Column

 

У такому випадку зручно будувати код у другій колонці, у редакторі скриптів (рис. 2.4.2). Після необхідних спроб (а в R загалом достатньо важко отримати необхідний текст відразу, відкрити та з голови написати; майже завжди необхідним є просування «навпомацки», шляхом спроб та помилок) у редакторі скриптів можна отримати певний фрагмент коду. Після цього цей фрагмент можна перенести у першу колонку, у редактор RMarkdown, і пояснити там у довільній формі, що, для чого і чому саме так робить цей фрагмент (без обмежень, що накладаються на коментарі у тілі R-скрипту, де, як пам’ятаєте, вони утворюються за допомогою «ґраток» — #).

Рис. 2.4.2 Так виглядає вікно RStudio у режимі трьох колонок

 

Коли RStudio створить документ RMarkdown, він додасть необхідну «шапку» та певні пояснення. Більшу частину їх можна видалити, але бажано залишити перший чанк (фрагмент кода). Чанки в RMarkdown маркуються сірим тлом. Першій чанк задає режим роботи наступних чанків. Спробуємо створити новий чанк (рис. 2.4.3).

Рис. 2.4.3 Щоб додати чанк, слід «натиснути» зелену кнопку з надписом «+C» і обрати його мову — у нашому випадку R

 

Після того, як чанк створено, у нього можна вставити який-небудь фрагмент коду. На рис. 2.4.4 показано, як певний фрагмент (до речі, як видно по скрину, написаний та опробуваний у редакторі скриптів) R-коду вставлений у новостворений чанк. Цей код створює два вектори (впорядковані послідовності), кожен з 20 елементів, і заповнює ці вектори випадковими послідовностями чисел (перша — у діапазоні від 0 до 20, друга — від 0 до 10). Після цього R має побудувати діаграму розсіювання, де ці випадкові числа розглядаються як координати 20-ти точок.

Рис. 2.4.4 Чанк створено. Як його виконати?

 

Рядки RMarkdown, що не входять у чанки, створюють певний маркований текст. Його можна побачити, якщо обрати у вікні редактору RMarkdown опцію Visual, замість опції Sourse (рис. 2.4.5). 

Рис. 2.4.5 Зверніть увагу: заголовок показано як заголовок, символи «---» перетворилися на «—». Але вигляд чанку змінився не суттєво

 

Щоб R-код у чанку було виконано, слід конвертувати документ RMarkdown. Це робить кнопка «Knit», буквально «зв'язати» (рис. 2.4.6).

Рис. 2.4.6 Кнопка «Knit» запускає конвертування документу RMarkdown у визначений формат

 

Внаслідок натискання цієї кнопки R створить нове вікно для результату конвертування створеного нами тексту. Оскільки в нашому прикладі в заголовку вказано «output: html_document», буде створено документ, написаний на основній мові, якою створено інтернет-документи, HyperText Markup Language — мовою розмітки гіпертексту. Файл з розширенням *.html буде створено автоматично. І, як ви бачите, в ньому буде як фрагмент R-коду, що був вміщений у чанку, і результат його виконання — діаграму розсіяння (рис. 2.4.7).

Рис. 2.4.7 Конвертований документ *.html створено

 

«Шпаргалку» з RMarkdown можна подивитися, наприклад, тут. Деякі часто використовані коди показано на рис. 2.4.8. Значно детальнішій огляд міститься, наприклад, в цій книзі.

Рис. 2.4.8 Порівняйте текст у RMarkdown-документі та в html-документі!