02 - Вступ до R

Прогнозування часових рядів

Ігор Мірошниченко

КНЕУ::ІІТЕ

оновлено: 2022-09-04

RStudio

Іконка RStudio

Після встановлення R та RStudio, на робочому столі у вас буде дві іконки:

- це для самої мови програмування

- це для IDE

Базовий інтерфейс RStudio

Створення скрипту

Як правило код пишуть у скрипті (такий собі аналог текстового редактора), тож для його створення необхідно натиснути зелений хрестик в лівому верхньому куті та обрати пункт R Script або натиснути комбінацію клавіш Ctrl+Shift+N:

Інтерфейс RStudio

Базові операції R

R та арифметика

# Додавання
2 + 2
[1] 4
# Віднімання
5 - 2
[1] 3
# Множення
3 * 5
[1] 15
# Ділення
25 / 5
[1] 5
# Степінь
3 ^ 3 
[1] 27
# Залишок від ділення
5 %% 3
[1] 2
# Цілочисельне ділення
17 %/% 5
[1] 3

Коментарі до коду

Для додавання коментарів використовується знак решітки або, як його ще називають, дієз — #. Все, що написано у рядку після # ігнорується R:

# look at this awesome code
2 + 2 - 3 + 1
[1] 2

Якщо необхідно “закоментувати” частину коду, тобто поставити # на початку кожного рядка, то для цього є комбінація клавіш Ctrl + Shift + C.

Пріоритети розрахунків

Не забувайте правильно розставляти дужки:

2 + 3 * 4
[1] 14
(2 + 3) * 4
[1] 20

Готові функції

sqrt(9)
[1] 3
sqrt((2 + 3) * 4)
[1] 4.472136
abs(3 - 5)
[1] 2
log(15)
[1] 2.70805
log(x = 10, base = 3)
[1] 2.095903
log(base = 3, x = 10)
[1] 2.095903
log(10, 3)
[1] 2.095903

Вбудована документація

help(abs)

?abs()

Але на мою думку, найшвидший варіант — це написати функцію і натиснути клавішу F1 на клавіатурі.

Створення змінних

В R це робиться за допомогою символів <-. Для швидкого написання існує зручна комбінація клавіш Alt + -.

Ліворуч від символу <- записується назва майбутньої змінної. Праворуч — значення або вираз, яке необхідно зберегти в цю змінну.

x <- 2
y <- 4
z <- sqrt(x^2 + y^3)

Для присвоювання можна використовувати і знак = але серед спільноти користувачів R це не прийнято.

Слід звернути увагу, що при присвоюванні результат розрахунку не виводиться в консоль. Якщо ж хочеться переглянути результат слід використати функцію print() або просто звернутися до створеної змінної:

print(z)
[1] 8.246211

Environment

Після створення змінна з’являється у вкладинці Environment робочого простору RStudio:

Оператори порівняння

Оператор порівняння Опис Приклад
== Дорівнює a == b
!= Не дорівнює a != b
> Більше a > b
< Менше a < b
>= Більше або дорівнює a >= b
<= Менше або дорівнює a <= b

Типи даних

Число

Один з найпопулярніших варіантів збереження даних — це числовий формат. В мові програмування R для нього є окремий клас — numeric. При цьому існує три типи numeric:

  • Цілі: integer.
  • Дробові: double.
  • Комплексні: complex.
class(10)
[1] "numeric"
typeof(10)
[1] "double"
typeof(10L)
[1] "integer"
is.integer(10)
[1] FALSE

Текст

Для роботи з текстовими даними є клас character. Вони записуються в лапках, при цьому можна використовувати як подвійні ", так і одинарні '.

is.character("Ash nazg durbatulûk, ash nazg gimbatul,
             ash nazg thrakatulûk, agh burzum-ishi krimpatul.")
[1] TRUE

Логічні

Це тип даних які приймають лише значення TRUE або FALSE. Ми з ними вже зустрічалися коли використовували оператори порівняння.

Структури даних

Закальна класифікація

Вектор

Вектор - це одновимірна послідовність елементів одного типу. Для створення вектору використовується функція c().

c(2, 4, 8, -2, -6, 0)
[1]  2  4  8 -2 -6  0
c("два", "чотири", "шість")
[1] "два"    "чотири" "шість" 
c(TRUE, TRUE, FALSE)
[1]  TRUE  TRUE FALSE

Для створення послідовностей з кроком 1 зручно використовувати оператор :

-5:5
 [1] -5 -4 -3 -2 -1  0  1  2  3  4  5
3:-2
[1]  3  2  1  0 -1 -2

Вектор

Для складніших послідовностей є вбудована функція seq()

seq(1, 10, by = 2)
[1] 1 3 5 7 9
seq(1, 10, length.out = 3)
[1]  1.0  5.5 10.0

Інша корисна функція rep() дозволяє створити вектор з повторюваними значеннями. Перший аргумент - значення яке слід повторювати, другий аргумент - скільки разів повторювати.

rep(3, 5)
[1] 3 3 3 3 3
rep(1:3, 5)
 [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
rep(1:3, 1:3)
[1] 1 2 2 3 3 3

Вектор

Крім того, можна об’єднувати вектори:

v1 <- c("Say", "friend")

v2 <- c("and", "enter")

c(v1, v2)
[1] "Say"    "friend" "and"    "enter" 

Приведення типів

Неявне приведення типів

c(TRUE, 2, FALSE)
[1] 1 2 0
3 - TRUE
[1] 2
c(TRUE, 2, "Hello")
[1] "TRUE"  "2"     "Hello"

В R є своя ієрархія типів: NULL < raw < logical < integer < double < complex < character < list < expression

Явне приведення типів

as.numeric(c(TRUE, 2, FALSE, FALSE))
[1] 1 2 0 0
as.character(c(TRUE, 2, FALSE, FALSE))
[1] "1" "2" "0" "0"

Операції з векторами

q <- 1:5
w <- 2:6
q + w
[1]  3  5  7  9 11
q - w
[1] -1 -1 -1 -1 -1
q * w
[1]  2  6 12 20 30
q / w
[1] 0.5000000 0.6666667 0.7500000 0.8000000 0.8333333
w ^ q + q - w * q
[1]    1    5   55  609 7751
sqrt(q)
[1] 1.000000 1.414214 1.732051 2.000000 2.236068

Правило переписування

q <- 1:2
w <- 1:4
q * w
[1] 1 4 3 8
q + c(1, 5, 7)
[1] 2 7 8

Індексація векторів

Важливо: індексація в мові програмування R починається з 1.

e <- c(-5:-3, 2, 7, -6, 4:2)
e[1]
[1] -5
e[5]
[1] 7
e[5] <- 15
e[6:1]
[1] -6 15  2 -3 -4 -5
e[-1]
[1] -4 -3  2 15 -6  4  3  2
e[c(-1, -5)]
[1] -4 -3  2 -6  4  3  2

Матриці, масиви, списки

Дата фрейми

Дата фрейми (data frames): різні стовпчики можуть містити різний тип даних (але їх довжина має бути однаковою). Для створення дата фрейму використовується функція data.frame().

my_df <- data.frame(name = c("Frodo", "Eowyn", "Legolas", "Arwen"),
                    sex = c("male", "female", "male", "female"),
                    age = c(51, 24, 2931, 2700),
                    one_ring = c(TRUE, FALSE, FALSE, FALSE))
my_df
     name    sex  age one_ring
1   Frodo   male   51     TRUE
2   Eowyn female   24    FALSE
3 Legolas   male 2931    FALSE
4   Arwen female 2700    FALSE

Переглянути структуру дата фрейму можна за допомогою функції str():

str(my_df)
'data.frame':   4 obs. of  4 variables:
 $ name    : chr  "Frodo" "Eowyn" "Legolas" "Arwen"
 $ sex     : chr  "male" "female" "male" "female"
 $ age     : num  51 24 2931 2700
 $ one_ring: logi  TRUE FALSE FALSE FALSE

Дата фрейми

Переглянути назви стовпців або надати їм нову назву можна за допомогою функції names():

names(my_df)
[1] "name"     "sex"      "age"      "one_ring"

Індексація аналогічно до матриці та списків можлива через [] та знак $:

my_df$name
[1] "Frodo"   "Eowyn"   "Legolas" "Arwen"  
my_df$name[2:3]
[1] "Eowyn"   "Legolas"
my_df[2,3]
[1] 24
my_df[2:3, "name"]
[1] "Eowyn"   "Legolas"

Пакети в R

Вбудовані пакети

R - мова програмування з дуже широкими можливостями. Однак рано чи пізно ми почнемо стикатися з задачами, які потребуватимуть додаткових можливостей. Ці можливості можна розширити за допомогою додаткових пакетів (packages).

rownames(installed.packages(priority = "base"))
 [1] "base"      "compiler"  "datasets"  "graphics"  "grDevices" "grid"     
 [7] "methods"   "parallel"  "splines"   "stats"     "stats4"    "tcltk"    
[13] "tools"     "utils"    

Встановлення пакетів з CRAN

Пакети які пройшли перевірку зберігаються в Comprehensive R Archive Network (CRAN).

Встановити додаткові пакети можна за допомогою Install в розділі Packages:

Підключення пакетів

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

library(vroom)

Мінімальний набір пакетів для вивчення дисципліни

  • tidyverse
  • fpp3

Дякую за увагу!