Освоюємо R

Матеріал з Вікіпідручника
Перейти до: навігація, пошук

R — мова програмування та середовище для розробки створені для аналізу даних і, зокрема, статистичних обчислень та машинного навчання. R доступна як на Windows так і на Linux. Завдяки наявності великої кількості безкоштовних бібліотек під різноманітні задачі, останніми роками здобуває все більшу популярність серед тих хто займається аналізом даних. Є безкоштовним конкурентом Matlab. Також зіставляє конкуренцію в даній галузі мові програмування Python.

Встановлення[ред.]

Дистрибутиви R безкоштовні і їх можна звантажити з офіційний сайтів, крім того наявні безкоштовні графічні середовища розробки для R (IDE). Найбільш популярна графічна оболонка для R - RStudio, хоча є можливості використовувати і універсальні IDE як то Eclipse (встановивши плагін StatET).

Вступ[ред.]

R — це інтерпретована мова. Для присвоєння використовується не =, а оператор <-. Так, щоб присвоїти k число 10:

k<-10

Вивести значення:

print(k)

Якщо працюємо в командному рядку то достатньо ввести назву об’єкту, щоб вивести його вміст:

> k
[1] 10

Для створення коментарів використовується символ #

Для того, щоб створити вектор з певними значеннями використовується функція c():

> x<-c(0.5,0.6) ## вектор дійсних чисел(numeric)

Щоб створити вектор з 5-ти елементів, що заповнений випадковим чином:

x<-rnorm(5)

Щоб завершити сесію можна скористатися функцією q().

plot (х,y) # вивести графік по y та х

Довідка[ред.]

help.start() #загальна довідка
help ("дещо") #допомога по функції "дещо" (лапки не обов'язкові)
?дещо # теж саме
help.search("щось") #пошук записів, що містять "дещо"
??дещо # теж саме
example("дещо") # приклади використання
RSiteSearch("дещо") # пошук в інтернеті
apropos("дещо", mode="function") #список всіх доступних функцій, в назві яких є "дещо" 
data() # список всіх демонстраційних даних, що містяться в завантажених пакетах
vignette() # список всіх доступних посібників по завантажених пакетах
vignette("дещо") # список посібників по темі "дещо"

Робочий простір[ред.]

Користувач може вибрати робочу директорію скориставшись функціями getwd() та setwd("директорія"). Для того, щоб уся зроблена робота не пропадала і можна було працювати на декількома проектами одночасно в R є можливість зберегти історію команд функцією savehistory() та весь поточний робочий простір save.image(). По замовчуванню, якщо не вказувати назви файлів, у робочій директорії будуть створені файли .Rhistory та .RData.

Структури даних[ред.]

Вектори[ред.]

Вектори - це числовий масив, що може містити числові, текстові або логічні значення. Причому вектори повинні бути однотипними, тобто не можна змішувати у векторі дані різних типів як то числа і текст.

v<-c(2,3,4,5,6) #створення вектора і заповнення його числами
v<-c(2:6) # те ж саме, створення вектора з рівномірним заповненням числами від 2 до 6
v[3]      # отримати 3-й елемента вектора
v(с(2,4,5)) # виклик 2, 4 та 5-го елементів вектора

Вектор з одним елементом називаєтся скаляром

Матриці[ред.]

Матриці - це двовимірні масиви однотипних елементів.

Матриці створюються за допомогою функції matrix виду:

m<- matrix(вектор, nrow=кількість_рядків, ncol=кількість_стовпців, 
           byrow=логічне_значення, dimnames=list(
           текст_вектор_назв_рядків, текст_вектор_назв_стовпців)

byrow - вказує як заповняти матрицю по стовпцях(по замовчуванню byrow=FALSE) чи по рядках (byrow=FALSE) текст_вектор_назв_рядків, текст_вектор_назв_стовпців - вектори, що дозволяють задати назви рядків та стовпців.

> inv<-c(5, 4, 6, 8)        #значення, що будуть заповнювати матрицю
> rnames<-c("R1", "R2")     #назви рядків
> cnames<-c("C1", "C2")     #назви стовпців  
> m<-matrix(inv, nrow=2, ncol=2, byrow=FALSE, dimnames=list (rnames, cnames))    #створюємо матрицю
> m                         #виводимо результат
   C1 C2
R1  5  6
R2  4  8

Звернення до елементів матриці відбувається так само як до елементів вектора:

m[2,3]          #звернення до елементу в 2 рядку і 3 стовпчику
m[2,]           #звернення до елементів 2-го рядку
m[,2]           #звернення до елементів 2-го стовпчику
m[1, c(3,4)]    #звернення до 3-го та 4-го елементів в першому рядку

Масиви[ред.]

Масиви в R по суті ті ж матриці тільки більшої розмірності. Створюються масиви за допомогою функції array():

myarray<-array(vector, dimensions, dimnames)

де vector - дані для заповнення,

   dimensions - розміри масив
   dimnames - необов'язковий список назв вимірів.

Наступний приклад демонструє створення масиву:

> dim1<-c("A1", "A2")
> dim2<-c("B1","B2", "B3")
> dim3<-c("C1", "C2", "C3", "C4")
> a<-array(1:24, c(2,3,4), dimnames = list(dim1, dim2, dim3))
> a
, , C1

   B1 B2 B3
A1  1  3  5
A2  2  4  6

, , C2

   B1 B2 B3
A1  7  9 11
A2  8 10 12

, , C3

   B1 B2 B3
A1 13 15 17
A2 14 16 18

, , C4

   B1 B2 B3
A1 19 21 23
A2 20 22 24
>

Звернення до елементів масиву, аналогічне до матриць:

> a[1,2,3]
[1] 15
> a[2,2,4]
[1] 22

Фрейми даних[ред.]

Фрейми даних (data frame, також перекладають як таблиці даних) - це найзастосовуваніша структура даних. На відміну від матриць фрейми можуть містити елементи різних типів, що зручно для роботи з реальними даними. Створюєтья фрейм даних наступним чином:

mydata<-data.frame(col1, col2,col3,...)

де col1, col2, col3 - це вектори будь-якого типу, що стануть стовпцями фрейму.

Фактори[ред.]

Часто буває, що певні значення представлені не у чесельному вигляді (кількісні дані), а у вигляді певних текстових позначень (категоріальні дані, також називаються номінальними, неметричними або ж якісними). Існує можливість перетворити їх у чисельні шляхом призначенням їм відповідного чисельного значення, що дає можливість порівнювати їх. Наприклад, якщо описується стан певного об'єкту через значення "прекрасно", "добре", "задовільно", "незадовільно", то можна призначити їм відповідні чисельні значення 4, 3, 2, 1. Для цього існує функція factor(). Функція може присвоювати значення в алфавітному порядку, або ж у заданому користувачем порядком.

> status<-c("незадовільно", "задовільно","добре", "прекрасно")
> numstatusAlph <- factor(status, order="true")
> numstatusOrder <- factor(status, order=TRUE, levels=c("незадовільно", "задовільно","добре", "прекрасно"))
> str(numstatusAlph)          # вивести інформацію про об'єкт та порядок входження факторыв у поданому векторі
 Ord.factor w/ 4 levels "добре"<"задовільно"<..: 3 2 1 4
> str(numstatusOrder)
 Ord.factor w/ 4 levels "незадовільно"<..: 1 2 3 4

#порівняння факторів
> numstatusOrder[2]>numstatusOrder[1]
[1] TRUE

> unclass(numstatusOrder) # подивитись детальніше
[1] 1 2 3 4
attr(,"levels")
[1] "незадовільно" "задовільно"   "добре"        "прекрасно"

Списки[ред.]

Списки - це впорядкований набір об'єктів, що об'єднані під одним іменим. Причому об'єкти можуть бути різні, не зв'язані між собою. Для створення об'єктів використовується функція list.

mylist <- list(об'єкт 1, об'єкт2, ...)

Звертатися до списків можна або ж по порядковому номеру, або ж по назві елементу всередині двійних квадратних дужок:

mylist[["Name_of_Object"]]
mylist[[3]]

Робота з діаграмами[ред.]

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

 investment<-c(5,10,13,18,20)                   # дані про інвестиції
 profit<-c(100,300, 400, 450, 470)              # дані про прибутки
 plot(investment, profit, type="p")             # будуємо діаграми заповнюючи її точками (p - points)
 abline(lm(profit~investment))                  # додати лінію регресії
 title ("Regression of Profit from Investment") # вивести заголовк над графіком

Задавати зовнішній вигляд елементів діаграми можна з використанням функції par(назва_параметру=параметр)

 par(lty=2, pch=17)        # задаємо пунктирну лінія (lty=2) та тип символу заповнення - трикутники (pch=17)
 plot(investment, profit)

Також можна це зробити зразу:

 plot(investment, profit, type="b", lty=2, pch=17) # type="b" - означає виводити і символи і лінії

Детальніше про управління зовнішнім виглядом дивіться у довідці по функції par.

Кольори[ред.]

Для задання кольорів слугує параметр col.

Параметр Опис
col задати колір діаграми. Для lines та pie можна задавати декілька кольорів. Тоді вони будуть використовуватися по черзі col=c("yello", "blue", "red")
col.axis колір значень осі (по замовчуванню - чорний)
col.lab колір підписів осей
col.main колір заголовків
col.sub колір підзаголовків
fg колір графіку (foreground)
bg колір фону (background)
par(col="blue") # графік та осі голубі
plot(investment, profit, type="b", col="red") #графік (лінія та точки) тепер червоний

Джерела[ред.]