R (мова програмування)

Rмова програмування і програмне середовище для статистичних обчислень, аналізу та зображення даних в графічному вигляді. Розробка R відбувалась під істотним впливом двох наявних мов програмування: мови програмування S з семантикою, успадкованою від Scheme[6]. R названа за першою літерою імен її засновників Роса Іхаки (Ross Ihaka) та Роберта Джентлмена, (Robert Gentleman)[7] працівників Оклендського Університету в Новій Зеландії. Незважаючи на деякі принципові відмінності, більшість програм, написаних мовою програмування S запускаються в середовищі R.

R
Парадигма функційне програмування, Масивове програмуванняd, об'єктно-орієнтоване програмування[1], імперативне програмування, Рефлексія і процедурне програмування
Дата появи серпень 1993[2]
Творці Ross Ihaka[en] та Robert Gentleman[en]
Розробник R Core Team[3]
Останній реліз 3.6.1 ("Action of the Toes")[4] (5 липня 2019; 4 роки тому (2019-07-05))
Система типізації динамічна
Під впливом від S, Scheme
Мова реалізації C[5], Fortran[5] і R[5]
Операційна система декілька:Linux/Unix, Windows, Mac OS X
Ліцензія GNU General Public License
Репозиторій вихідного коду svn.r-project.org/R/trunk/
Вебсайт www.r-project.org

R поширюється безкоштовно за ліцензією GNU General Public License [8][9] у вигляді вільнодоступного вихідного коду або відкомпільованих бінарних версій більшості операційних систем: Linux, FreeBSD, Microsoft Windows, Mac OS X, Solaris. R використовує текстовий інтерфейс, однак існують різні графічні інтерфейси користувача (див. Графічні Редактори Скриптів та IDE).

R має значні можливості для здійснення статистичних аналізів, включаючи лінійну і нелінійну регресію, класичні статистичні тести, аналіз часових рядів (серій), кластерний аналіз і багато іншого. R легко розбудовується завдяки використанню додаткових функцій і пакетів, доступних на сайті Comprehensive R Archive Network (CRAN) [Архівовано 5 січня 2008 у Wayback Machine.]. Більша частина стандартних функцій R написана мовою R, однак існує можливість підключати код, написаний C, C++ або Фортраном. Також за допомогою програмного коду на C або Java [10] можна безпосередньо маніпулювати R об'єктами.

Особливості

R належить до інтерпретованих мов програмування і для роботи використовується командний інтерпретатор. Наприклад, робота R в терміналі має такий вигляд:

  > 1+1  [1] 2

R підтримує концепцію об'єктно-орієнтованого програмування (ООП), включаючи generic функції, результат виконання якої залежить від аргументів (типу об'єктів), що передаються generic функції. В мові програмування R всі змінні є об'єктами, кожен об'єкт належить до певного класу.[11]При цьому R має дві класові моделі: S3 та S4. Перша була реалізована від початку існування R, друга була додана у версії 1.7.0 [12] з пакетом methods [Архівовано 27 серпня 2013 у Wayback Machine.]. S3 не є справжньою класовою системою, класи S3-об'єкта визначаються простим атрибутом — вектором символьних рядків:

> q <- 1> class(q)                             # перевіряємо клас q[1] "numeric"                          # q - число> class(q) <- c("character", class(q)) # "розширимо" клас q> q[1] 1attr(,"class")[1] "character" "numeric"              # тепер q належить до двох класів

При цьому, при виконанні generic функцій, таких як plot() чи summary(), диспетчер методів шукає в таблиці методів метод, який узгоджується з іменем першого аргумента.

# Генеруємо вибірку з повторами з множини перших 5 літер, розміром у 20 елементів. # Після чого будуємо факторну таблицю (contingency table)> m <- table(sample(LETTERS[1:5], size = 20, replace = T)) # щоб дізнатись значення змінної - просто вводимо її ім'я в консолі> mA B C D E 4 5 3 2 6 > class(m) [1] "table"                     # m - факторна таблиця> summary(m)                    # фактично виконується summary.table() Number of cases in table: 20 Number of factors: 1 > as.vector(m)                  # m як вектор[1] 4 5 3 2 6> summary(as.vector(m))         # виконується summary.default()   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.       2       3       4       4       5       6

Хоча S3 проста система, але вона виявилась досить потужною і зручною саме для інтерактивного аналізу даних. S4 класи не такі "інтерактивні" і вони більше підходять для написання, наприклад, бібліотек. При створенні S4 класу потрібно вказати його ім'я і слоти (тобто поля). При цьому можна вказати від яких класів походить цей клас (це можуть бути S4 і S3 класи), прототип і функцію валідації (за замовченням перевіряється лише відповідність типу слоту і його значення, але можна ввести перевірку самого значення, наприклад, допускати лише числа менші 10).

# Визначаємо S4-класAClass <- setClass("AClass"                                                     # ім'я класу                     , representation(adata = "character", alength = "numeric")   # імена слотів та їхні типи/класи                   , prototype(adata  = "Hello world!", alength = 12)           # прототип класу                   , validity = function(object){                               # функція валідації                       if(object@alength < 15) return(T)                         # якщо alength < 15, то все ок                      F                                                         # інакше - помилка                     }  # наслідуємо AClass додавши новий слот                 )BClass <- setClass("BClass", contains= "AClass", slots = c(bdata = "numeric"))  # створюємо об'єкт класу AClass> AClass()                                                                      An object of class "AClass"                                                     # оскільки в конструктор нічого не було передано Slot "adata":                                                                   # то створюється прототип[1] "Hello world!"Slot "alength":[1] 12# створюємо інший AClass-об'єкт> AClass(adata = "Hello another world!", alength = nchar("Hello another world!")) Error in validObject(.Object) : invalid class “AClass” object: FALSE              # alength >= 15, тому генерується помилка

S4-generic функції також мають певні відмінності від їхніх S3 побратимів. Головною відмінністю є можливість визначення сигнатури для generic-функції і для її методів, тобто перевіряється тип не лише першого аргументу, а й решти. При цьому в сигнатурі можна використати спеціальні типи ANY та MISSING, які вказують на те, що аргумент може бути будь-якого типу, або бути обов'язково пропущеним, відповідно.

Оскільки в R функції є об'єктами першого класу (тобто їх можна передавати як аргументи в інші функції та присвоювати змінним), то можна створити клас від типу function:

# визначимо функцію, яка просто збільшує аргумент на 10 і повертає результатfoo <- function(p){   p + 10;}# наслідуємо клас від функціїCFun <- setClass("CFun", contains = c("function")                 , slots = c(param = "numeric")                 )# визначимо метод generic-функції show для класу CFunsetMethod("show", "CFun",               function(object) {             cat("Show method for CFun objects\n")       # виводимо рядок             cat(object(object@param))                   # використовуємо CFun-об'єкт як функцію          })# створимо новий об'єкт класу CFun > cf.obj <- CFun(foo, param = 13)# тепер введемо в консолі ім'я створеного об'єкту, щоб подивитись його значення# при цьому буде знайдено відповідний метод функції show > cf.objShow method for CFun objects23                                    # == foo(13) == cf.obj(cf.obj@param)

Важливою особливістю R є тотальне використання того, що називають, recycling:

# Створюємо вектор чисел від 1 до 10> x <- 1:10> x [1]  1  2  3  4  5  6  7  8  9 10# кожен елемент х порівнюється з 4# фактично х порівнюється з 10-елементним вектором, що складається лише з 4# говорять, що 4 була recycled, перероблена> x > 4 [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE# додамо 10 до елементів х окрім 4,5 та 6-го> x[-(4:6)] + 10[1] 11 12 13 17 18 19 20# якщо довжина довшого об'єктів не ділиться націло на довжину коротшого, то виводиться попредження# але операція все одно виконується > x + c(10, 100, 1000) [1]   11  102 1003   14  105 1006   17  108 1009   20Warning message:In x + c(10, 100, 1000) :  longer object length is not a multiple of shorter object length


Хоча R орієнтована на розв'язок і аналіз статистичних задач, вона може використовуватися для матричних обрахунків з порівняльною швидкодією до математичних пакетів GNU Octave або MATLAB.[13]

Створено багато пакетів для статистичних обчислень, біоінформатики, оптимізації тощо (див. "Пакети/Бібліотеки").

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

Іншою особливістю є функція Sweave, яка дозволяє інтеграцію і виконання коду R в документах, написаних за допомогою LaTeX з метою створення динамічних звітів[14].

R de-facto став стандартом у міжнародній спільноті спеціалістів в галузі статистики, і широко використовується в розробках статистичних програм та аналізі даних[15]. Згідно щорічному опитуванню Rexer's Annual Data Miner Survey в 2010 році, більшість (43%) серед опитаних спеціалістів з аналізу даних використовують у своїй роботі середовище R[16].

Приклади коду R

Приклади[17] ілюструють базовий синтаксис мови програмування R з використанням інтерфейсу командного рядка:

Приклад 1

Створення числового і символьного векторів

> # Все, що за символом #, інтерпретується як коментар> x <- c(1,2,3,4,5,6,7,8,9,10)  # Створення числового вектора> y <- 2^x                      # піднесення числа до степеня х> y                             # перегляд змісту об'єкта y, аналогічно print(y)       [1]    2    4    8   16   32   64  128  256  512 1024 > b1 <- c("Kharkiv","Kyiv","Lviv") # символьний вектор> b1[1] "Kharkiv" "Kyiv"  "Lviv"
Гістограма згенерована за допомогою коду R Приклад 2

Приклад 2

Генерація випадкових чисел нормального розподілу і побудова гістограми

> x <- rnorm(1000) # генерація 1000 випадкових чисел                    # з розподілу Гауса> histogram <- hist(x, breaks=50, plot=FALSE) # розрахунок гістограми для змінної x,                                                # кількість інтервалів 50 > plot(histogram, col="blue",border="red") # зображення гістограми за допомогою функції plot()

Пакети/Бібліотеки

Можливості R значно розширюються додатковими пакетами (бібліотеками). Пакети розробляються безпосередньо користувачами R. Існує понад 4500 пакетів, доступних на сайті Comprehensive R Archive Network (CRAN) [Архівовано 5 січня 2008 у Wayback Machine.], Omegahat , Bioconductor [Архівовано 16 липня 2011 у Wayback Machine.], R-Forge [Архівовано 6 липня 2011 у Wayback Machine.].[18].

На сторінці "Task View" вебсайту CRAN [Архівовано 20 червня 2010 у Wayback Machine.] розміщено список напрямків (Фінанси, Генетика, Хеміометрія і Математична Фізика, Навколишнє середовище, Суспільні науки), в яких використовується R і для яких доступні пакети на сайті.

Графічні Редактори Скриптів та IDE

Для роботи з R існує кілька графічних інтерфейсів (GUI)

  • Графічна оболонка RGui разом з командною оболонкою (терміналом) R Console входять до базового пакету R у версії для Windows
  • RStudio — зручне кросплатформне середовище розробки з відкритим кодом (існує можливість запуску на віддаленому linux сервері).
  • RKWard — розширюване середовище розробки IDE
  • RapidMiner [Архівовано 22 червня 2011 у Wayback Machine.] і розширення RapidMiner R — середовище розробки для аналізу і обробки даних з використанням R, WEKA
  • Java Gui for R (JGR) [Архівовано 30 червня 2011 у Wayback Machine.] — кросплатформний термінал і редактор R написаний на Java
  • Deducer [Архівовано 24 жовтня 2016 у Wayback Machine.] — графічний інтерфейс для аналізів даних з використанням системи меню (подібний до SPSS). Розроблений для використання разом з JGR та RGui.
  • Rattle GUI [Архівовано 5 липня 2011 у Wayback Machine.] — кросплатформний графічний інтерфейс, розроблений для добування даних (збору та аналізу даних).
  • R Commander — кросплатформний GUI з системою меню і доступними додатковими плагінами (базується Tcl/Tk)
  • RExcel — додаток до Microsoft Excel, який дозволяє використовувати можливості R
  • Sage — середовище для математичних розрахунків з використанням інтерфейсу веббраузера, бібліотек R і підтримкою rpy
  • Red-R — інтерфейс для аналізу, що використовує R
  • Tinn-R [Архівовано 11 червня 2011 у Wayback Machine.] — графічний інтерфейс

Середовища розробки (IDE)

Текстові редактори та середовища розробки (IDE) з частковою підтримкою R

gedit,Bluefish [Архівовано 5 липня 2011 у Wayback Machine.],IDE Eclipse,Kate,[19]Vim,Emacs (Emacs Speaks Statistics [Архівовано 2 травня 2022 у Wayback Machine.]),Crimson Editor [Архівовано 17 грудня 2017 у Wayback Machine.],ConTEXT [Архівовано 27 червня 2011 у Wayback Machine.],Tinn-R[20],Geany [Архівовано 28 січня 2021 у Wayback Machine.],jEdit,Syn [Архівовано 20 серпня 2011 у Wayback Machine.],TextMate — The Missing Editor for Mac OS X [Архівовано 6 вересня 2008 у Wayback Machine.],SciTE [Архівовано 20 лютого 2011 у Wayback Machine.], WinEdt [Архівовано 26 квітня 2007 у Wayback Machine.] (R Package RWinEdt), WPE, notepad++[21] і SciViews.

Взаємодія з іншими мовами програмування

R доступна для використання у мовах програмуваннях Python (за допомогою пакета RPy[22]), Perl (за допомогою модуля Statistics::R[23] ) і Ruby (за допомогою RSRuby[24] ).

Підтримка R пропрієтарними програмними продуктами

Деякі пропрієтарні програмні продукти, призначені для аналізу статистичних даних (напр. SPSS, STATISTICA[25], SAS[26]), мають розширення, розроблені для інтеграції у свої структури функціоналу R.

Заснована 2007 року компанія Revolution Analytics розпочала комерційну підтримку версії R під назвою ParallelR, розробленої спеціально для кластерів робочих станцій. В 2011 з'явилася можливість зчитувати і записувати дані у формат файлів SAS за допомогою пропієтарного Enterprise R[27].

Див. також

Українська література з R

Примітки

  • Ihaka R. R : Past and Future History
  • Hornik, Kurt (26 листопада 2015). R FAQ. The Comprehensive R Archive Network. 2.1 What is R?. Архів оригіналу за 9 липня 2011. Процитовано 5 серпня 2018.
  • The Comprehensive R Archive Network. Архів оригіналу за 23 січня 2019. Процитовано 5 липня 2019.
  • а б в http://librestats.com/2011/08/27/how-much-of-r-is-written-in-r/
  • Michael J. Crawley (2007). The R Book. John Wiley & Sons. ISBN 978-0-470-51024-7.
  • Robert Gentleman's home page. Архів оригіналу за 25 червня 2013. Процитовано 20 липня 2009.
  • Free Software Foundation (FSF) Free Software Directory: GNU R. Архів оригіналу за 25 червня 2013. Процитовано 5 липня 2010.
  • What is R?. Архів оригіналу за 25 червня 2013. Процитовано 28 квітня 2009.
  • Duncan Temple Lang, Calling R from Java (PDF), архів оригіналу (PDF) за 21 серпня 2010, процитовано 5 липня 2010
  • W. N. Venables та B. D. Ripley (2002). Modern Applied Statistics with S (вид. четверте). Springer. ISBN 978-0-387-95457-8.
  • S4 Classes and Methods (PDF). Архів (PDF) оригіналу за 13 серпня 2013. Процитовано 4 серпня 2013.
  • Speed comparison of various number crunching packages (version 2). SciView. Архів оригіналу за 25 червня 2013. Процитовано 3 листопада 2007.
  • Leisch F (2002). Sweave, Part I: Mixing R and LaTeX: A short introduction to the Sweave file format and corresponding R functions. R News. 2 (3): 28—31.
  • Vance, Ashlee (6 січня 2009). Data Analysts Captivated by R's Power. New York Times. Архів оригіналу за 31 жовтня 2017. Процитовано 28 квітня 2009. R is also the name of a popular programming language used by a growing number of data analysts inside corporations and academia. It is becoming their lingua franca...
  • Архівована копія. Архів оригіналу за 15 липня 2011. Процитовано 27 червня 2011.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  • Віктор Гнатюк (2010). Вступ до R на прикладах (PDF).[недоступне посилання з червня 2019]
  • Robert A. Muenchen. The Popularity of Data Analysis Software. Архів оригіналу за 25 червня 2013. Процитовано 27 червня 2011.
  • Syntax Highlighting. Kate Development Team. Архів оригіналу за 7 липня 2008. Процитовано 9 липня 2008.
  • Tinn-R Editor - GUI for R Language and Environment. Tinn-R Team. Архів оригіналу за 25 червня 2013. Процитовано 7 листопада 2010.
  • NppToR: R in Notepad++. sourceforge.net. Архів оригіналу за 25 червня 2013. Процитовано 11 липня 2010.
  • RPy home page. Архів оригіналу за 18 листопада 2019. Процитовано 12 травня 2022.
  • Statistics::R page on CPAN. Архів оригіналу за 1 грудня 2011. Процитовано 9 вересня 2011.
  • RSRuby rubyforge project. Архів оригіналу за 5 липня 2015. Процитовано 9 вересня 2011.
  • Архівована копія. Архів оригіналу за 12 червня 2013. Процитовано 9 вересня 2011.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  • Архівована копія. Архів оригіналу за 10 червня 2011. Процитовано 27 червня 2011.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  • 'Red Hat for stats' goes toe-to-toe with SAS. Архів оригіналу за 9 жовтня 2011. Процитовано 27 червня 2011.
  • Посилання

    🔥 Top keywords: Файл:Pornhub-logo.svgГоловна сторінкаPorno for PyrosБрати КапрановиСпеціальна:ПошукUkr.netНові знанняЛіга чемпіонів УЄФАХ-69Файл:XVideos logo.svgСлобоженко Олександр ОлександровичPornhubЧернігівYouTubeУкраїнаЛунін Андрій ОлексійовичІскандер (ракетний комплекс)Шевченко Тарас ГригоровичATACMSДень працівників пожежної охорониВірастюк Василь ЯрославовичВікторія СпартцАлеппоFacebookГолос УкраїниКиївПетриченко Павло ВікторовичДуров Павло ВалерійовичСексФолаутТериторіальний центр комплектування та соціальної підтримкиTelegramНаселення УкраїниГай Юлій ЦезарЛеся УкраїнкаОхлобистін Іван ІвановичOLXДруга світова війнаЗагоризонтний радіолокатор