R — мова програмування і програмне середовище для статистичних обчислень, аналізу та зображення даних в графічному вигляді. Розробка R відбувалась під істотним впливом двох наявних мов програмування: мови програмування S з семантикою, успадкованою від Scheme. R названа за першою літерою імен її засновників Роса Іхаки (Ross Ihaka) та Роберта Джентлмена, (Robert Gentleman) працівників Оклендського Університету в Новій Зеландії. Незважаючи на деякі принципові відмінності, більшість програм, написаних мовою програмування S запускаються в середовищі R.
R | |
---|---|
Парадигма | Функційне програмування, Масивове програмуванняd, об'єктно-орієнтоване програмування, імперативне програмування, Рефлексія і Процедурне програмування |
Дата появи | серпень 1993 |
Творці | Ross Ihaka[en] та Robert Gentleman[en] |
Розробник | R Core Team |
Останній реліз | 3.6.1 ("Action of the Toes") (5 липня 2019 ) |
Система типізації | динамічна |
Під впливом від | S, Scheme |
Мова реалізації | C, Fortran і R |
Операційна система | декілька:Linux/Unix, Windows, Mac OS X |
Ліцензія | GNU General Public License |
Репозиторій вихідного коду | svn.r-project.org/R/trunk/ |
Вебсайт | www.r-project.org |
R у Вікісховищі |
R поширюється безкоштовно за ліцензією GNU General Public License у вигляді вільнодоступного вихідного коду або відкомпільованих бінарних версій більшості операційних систем: 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 можна безпосередньо маніпулювати R об'єктами.
Особливості Редагувати
R належить до інтерпретованих мов програмування і для роботи використовується командний інтерпретатор. Наприклад, робота R в терміналі має такий вигляд:
> 1+1 [1] 2
R підтримує концепцію об'єктно-орієнтованого програмування (ООП), включаючи generic функції, результат виконання якої залежить від аргументів (типу об'єктів), що передаються generic функції. В мові програмування R всі змінні є об'єктами, кожен об'єкт належить до певного класу. При цьому R має дві класові моделі: S3 та S4. Перша була реалізована від початку існування R, друга була додана у версії 1.7.0 з пакетом methods [ 27 серпня 2013 у Wayback Machine.]. S3 не є справжньою класовою системою, класи S3-об'єкта визначаються простим атрибутом — вектором символьних рядків:
> q <- 1 > class(q) # перевіряємо клас q [1] "numeric" # q - число > class(q) <- c("character", class(q)) # "розширимо" клас q > q [1] 1 attr(,"class") [1] "character" "numeric" # тепер q належить до двох класів
При цьому, при виконанні generic функцій, таких як plot()
чи summary()
, диспетчер методів шукає в таблиці методів метод, який узгоджується з іменем першого аргумента.
# Генеруємо вибірку з повторами з множини перших 5 літер, розміром у 20 елементів. # Після чого будуємо факторну таблицю (contingency table) > m <- table(sample(LETTERS[1:5], size = 20, replace = T)) # щоб дізнатись значення змінної - просто вводимо її ім'я в консолі > m A 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 для класу CFun setMethod("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.obj Show method for CFun objects 23 # == 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 20 Warning message: In x + c(10, 100, 1000) : longer object length is not a multiple of shorter object length
Хоча R орієнтована на розв'язок і аналіз статистичних задач, вона може використовуватися для матричних обрахунків з порівняльною швидкодією до математичних пакетів GNU Octave або MATLAB.
Створено багато пакетів для статистичних обчислень, біоінформатики, оптимізації тощо (див. "Пакети/Бібліотеки").
Середовище R містить засоби для візуалізації результатів обчислень (двовимірні, тривимірні графіки, діаграми, гістограми, діаграми (схеми) Ганта тощо). Графічні можливості R дозволяють створювати високоякісні графіки з різними атрибутами, зокрема математичні формули і символи.
Іншою особливістю є функція Sweave, яка дозволяє інтеграцію і виконання коду R в документах, написаних за допомогою LaTeX з метою створення динамічних звітів.
R de-facto став стандартом у міжнародній спільноті спеціалістів в галузі статистики, і широко використовується в розробках статистичних програм та аналізі даних. Згідно щорічному опитуванню Rexer's Annual Data Miner Survey в 2010 році, більшість (43%) серед опитаних спеціалістів з аналізу даних використовують у своїй роботі середовище R.
Приклади коду R Редагувати
Приклади ілюструють базовий синтаксис мови програмування 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"
Приклад 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.], , Bioconductor [ 16 липня 2011 у Wayback Machine.], R-Forge [ 6 липня 2011 у Wayback Machine.]. .
На сторінці "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,Vim, Emacs (Emacs Speaks Statistics [ 2 травня 2022 у Wayback Machine.]), Crimson Editor [ 17 грудня 2017 у Wayback Machine.], ConTEXT [ 27 червня 2011 у Wayback Machine.], Tinn-R, 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), , notepad++ і SciViews.
Взаємодія з іншими мовами програмування Редагувати
R доступна для використання у мовах програмуваннях Python (за допомогою пакета RPy), Perl (за допомогою модуля Statistics::R ) і Ruby (за допомогою RSRuby ).
Підтримка R пропрієтарними програмними продуктами Редагувати
Деякі пропрієтарні програмні продукти, призначені для аналізу статистичних даних (напр. SPSS, STATISTICA, SAS), мають розширення, розроблені для інтеграції у свої структури функціоналу R.
Заснована 2007 року компанія Revolution Analytics розпочала комерційну підтримку версії R під назвою ParallelR, розробленої спеціально для кластерів робочих станцій. В 2011 з'явилася можливість зчитувати і записувати дані у формат файлів SAS за допомогою пропієтарного Enterprise R.
Див. також Редагувати
- Наукова візуалізація
- Статистика
- Список статистичного ПЗ[en]
- Порівняння статистичних пакетів[en]
- Список ПЗ для чисельних обрахунків[en]
- Порівняння програм для чисельних обрахунків[en]
- Sweave
- ggplot2
Українська література з R Редагувати
- Вступ до R на прикладах [ 7 листопада 2013 у Wayback Machine.] Віктор Гнатюк ХНЕУ 2010
Примітки Редагувати
- https://cran.r-project.org/doc/manuals/r-release/R-intro.html#Objects
- Ihaka R. R : Past and Future History
- Hornik, Kurt (26 листопада 2015). . The Comprehensive R Archive Network. 2.1 What is R?. Архів оригіналу за 9 липня 2011. Процитовано 5 серпня 2018.
- . Архів оригіналу за 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. . Архів оригіналу за 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. Архів оригіналу за 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). . 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.
- Віктор Гнатюк (2010). Вступ до R на прикладах.[недоступне посилання з червня 2019]
- Robert A. Muenchen. The Popularity of Data Analysis Software. Архів оригіналу за 25 червня 2013. Процитовано 27 червня 2011.
- . 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.
- . Архів оригіналу за 18 листопада 2019. Процитовано 12 травня 2022.
- . Архів оригіналу за 1 грудня 2011. Процитовано 9 вересня 2011.
- . Архів оригіналу за 5 липня 2015. Процитовано 9 вересня 2011.
- . Архів оригіналу за 12 червня 2013. Процитовано 9 вересня 2011.
- . Архів оригіналу за 10 червня 2011. Процитовано 27 червня 2011.
- . Архів оригіналу за 9 жовтня 2011. Процитовано 27 червня 2011.
Посилання Редагувати
- Офіційний вебсайт проекту R
- CRAN: Архів файлів R [ 5 січня 2008 у Wayback Machine.]
- R books [ 29 квітня 2011 у Wayback Machine.] розширений список літератури з мови програмування R
- The R Graphical Manual [ 29 січня 2012 у Wayback Machine.], колекція графіків більшості пакетів R
- R seek [ 6 травня 2022 у Wayback Machine.] фронтенд до пошукового сервісу Google з метою полегшення знаходження результатів пов'язаних з мовою програмування R
- R-bloggers [ 5 лютого 2010 у Wayback Machine.] Агрегатор блогів на тематику з використання R