R (язык программирования)
R | |
---|---|
Класс языка | мультипарадигмальный |
Тип исполнения | интерпретируемый |
Появился в | 1993[1] |
Автор |
Росс Айхэка Роберт Джентлмен |
Выпуск |
|
Система типов | динамическая |
Испытал влияние | S, Scheme |
Лицензия | GNU GPL 2[4] |
Сайт | r-project.org (англ.) |
ОС | GNU/Linux[5], BSD[вд][5], macOS[5] и Windows[5] |
Медиафайлы на Викискладе |
R — язык программирования для статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом в рамках проекта GNU. Язык создавался как аналогичный языку S, разработанному в Bell Labs, и является его альтернативной реализацией, хотя между языками есть существенные отличия, но в большинстве своём код на языке S работает в среде R. Изначально R был разработан сотрудниками статистического факультета Оклендского университета Россом Айхэкой (англ. Ross Ihaka) и Робертом Джентлменом (англ. Robert Gentleman) (первая буква их имён — R); язык и среда поддерживаются и развиваются организацией R Foundation[6].
Широко используется как статистическое программное обеспечение для анализа данных и фактически стал стандартом для статистических программ[7].
Язык и среда доступны под лицензией GNU GPL; распространяются в виде исходных кодов, а также откомпилированных приложений под ряд операционных систем: FreeBSD, Solaris[8] и другие дистрибутивы Unix и Linux, Windows, macOS.
В R используется интерфейс командной строки, хотя доступны и несколько графических интерфейсов пользователя, например пакет R Commander, RKWard, RStudio, Weka, Rapid Miner, KNIME[англ.], а также средства интеграции в офисные пакеты.
В 2010 году R вошёл в список победителей конкурса журнала Infoworld в номинации на лучшее открытое программное обеспечение для разработки приложений[9].
Особенности
[править | править код]R — интерпретируемый язык программирования, основным способом работы с которым является командный интерпретатор. Язык является регистрозависимым, в плане синтаксиса он похож, с одной стороны, на функциональные языки типа Scheme, с другой — на типичные современные сценарные языки, с простым синтаксисом и небольшим набором основных конструкций. Язык объектный: любой программный объект в нём имеет набор атрибутов — именованный список значений, определяющих его.
Язык поддерживает минимальный набор примитивных типов данных: символьный (character), числовой (numeric), логический (logical) и комплексный (complex). Числовые переменные, помимо обычных чисел, могут принимать специальные значения NaN (Not a Number — «не число») и Inf (Infinity — «бесконечность»). Бесконечность (положительная или отрицательная) получается при выходе результата вычислений за пределы представимого реализацией диапазона, NaN — при операциях с неопределённым результатом. Помимо этих, имеется ещё одно очень важное специальное значение, NA (Not Available — «не доступно»). Оно может быть использовано для фиксации того факта, что соответствующее значение, участвующее в вычислениях, по какой-либо причине не было получено (достаточно обычная в статистических расчётах ситуация, когда из-за сбоев в сборе данных некоторые наблюдения остаются без результатов).
Значе��ия примитивных типов могут объединяться в векторы (vector), списки (list), матрицы или массивы (matrix), в том числе многомерные; эти комбинированные типы хранят наборы данных одного и того же примитивного типа. Помимо этого язык содержит понятие факторов (factor) — наборов категориальных или шкальных данных, принимающих строго определённый набор значений. Наконец, могут создаваться таблицы (data frame) — структуры данных, которые для каждой строки (индивида) хранят набор различных (и имеющих разные типы) параметров (признаков). Особенностью R является то, что операции с векторами и матрицами поддерживаются на уровне самого языка, как, например, в APL.
Существует операция извлечения и записи данных (аналог присваивания) «<-
», а также обычные операции работы с данными, в том числе арифметические. Доступ по индексу к элементам векторов и массивов осуществляется с помощью квадратных скобок, доступ к атрибутам списков — посредством оператора «$
». Имеется минимальный набор обычных конструкций императивного программирования: условный оператор if
, циклы while
и for
. Выражения на R можно описывать как отдельные объекты и вычислять по мере необходимости. На этом же механизме основано описание функций. Имеются встроенные в язык средства применения выражений и функций к векторам и массивам.
Функции R могут объединяться в пакеты — загружаемые модули, которые подключаются к любой программе и предоставляют объединённые в них вычислительные средства. Пакеты для R могут разрабатываться на других языках программирования, в том числе на Си, что позволяет, с одной стороны, скомпенсировать ограниченность изобразительных средств самого языка R, а с другой — при необходимости достигнуть высоких показателей вычислительной производительности.
Сам язык имеет довольно ограниченные и не слишком удобные средства описания данных, но это компенсируется наличием библиотечных средств, которые позволяют загружать в виде таблиц R наборы данных, представленных в большинстве открытых и многих проприетарных форматах. Так, в R могут быть легко загружены таблицы в простом текстовом формате, таблицы Excel различных версий, данные в форматах CSV, XML и многих других.
В целом, как язык программирования, R довольно прост и даже примитивен. Его наиболее сильная сторона — возможность неограниченного расширения с помощью пакетов. В базовую поставку R включён основной набор пакетов, а всего по состоянию на 2024 год доступно более 20 304 пакетов[10]. В R реализованы практически все актуальные средства универсальных статистических вычислений, такие как регрессионный анализ и анализ временных рядов, а также множество специфических алгоритмов для решения узкоспециализированных задач и исследований в отдельных областях.
Ещё одна особенность языка — возможность создания качественной графики типографского уровня, которая может быть экспортирована в распространённые графические форматы и использована для презентаций или публикаций. Имеются готовые пакеты, связывающие R с GUI-фреймворками (например, основанными на Tcl/Tk) и позволяющие создавать специализированные утилиты статистического анализа с графическим интерфейсом пользователя и отображением результатов в виде графиков и диаграмм.
Примеры
[править | править код]Базовый синтаксис
[править | править код]> x <- c(1,2,3,4,5,6) # Создать упорядоченную коллекцию
> y <- x^2 # Возвести в квадрат элементы из x
> print(y) # Вывести y
[1] 1 4 9 16 25 36
> mean(y) # Рассчитать среднее арифметическое y; результат - число
[1] 15.16667
> var(y) # Рассчитать дисперсию
[1] 178.9667
Средний балл выпускника вуза
[править | править код]# В переменную a поместить список всех оценок:
a <- c(4,3,3,3,3,4,4,4,4,4,5,4,4,4,5,5,5,5,+
3,5,5,4,4,3,3,4,4,3,5,5,4,3,3,4,4,3,3,5,4,5,5)
# В переменную n поместить количество оценок:
length(a) -> n
# Средний балл:
m <- mean(a)
# Таблица (горизонтальная) с подсчётом количества оценок:
t <- table(a)
# Преобразование в более удобный формат данных (вертикальную таблицу):
f <- as.data.frame(t)
# Вычисление процентной доли и запись её в третий столбец:
mapply(function(r) r*100/n, f[,2]) -> f[,3]
# Заголовки столбцов:
colnames(f) <- c("Оценка", "Кол-во", "%")
# Вывод результатов:
a
n
m
f
Результат:
[1] 4 3 3 3 3 4 4 4 4 4 5 4 4 4 5 5 5 5 3 5 5 4 4 3 3 4 4 3 5 5 4 3 3 4 4 3 3 5 | вывод a (в строку влезли 38 чисел из 41) [39] 4 5 5 | (оставшиеся три числа) [1] 41 | вывод n [1] 4 | вывод m Оценка Кол-во % | 1-й столбец - номер строки в таблице 1 3 12 29.26829 | 2-й столбец - вид оценки ("3"/"4"/"5") 2 4 17 41.46341111 | 3-й столбец - количество оценок 3 5 12 29.26829 | 4-й столбец - процентная доля оценок
Инструменты
[править | править код]Для удобства работы с R разработан ряд графических интерфейсов, в том числе RStudio, JGR, RKWard, SciViews-R, Statistical Lab, R Commander, Rattle, а также программный пакет Shiny.
Кроме того, в ряде текстовых и кодовых редакторов предусмотренные специальные режимы для работы с R, в частности в ConTEXT, Emacs (Emacs Speaks Statistics), jEdit, Kate, Notepad++, Syn, TextMate, Tinn-R, Vim, Bluefish, WinEdt (с пакетом RWinEdt), Gedit (с пакетом rgedit/gedit-r-plugin). Для среды разработки Eclipse существует специализированный R-плагин; доступ к функциям и среде выполнения R возможен из Python с использованием пакета RPy; работать с R можно из эконометрического пакета Gretl.
Коммерциализация
[править | править код]Компания Revolution Analytics, основанная в 2007 году и поглощённая Microsoft в 2015 году, целиком свой бизнес основывала на коммерциализации языка программирования R, в её коммерческом пакете Revolution R примечательны такие компоненты (не распространяемые со свободной версией языка), как ParallelR (поддержка многопоточности среды выполнения), R Productivity Environment (интегрированная среда разработки), RevoScaleR (поддержка массово-параллельной обработки в рамках концепции «больших данных»), RevoDeployR, библиотеки по интеграции с веб-службами, поддержка форматов статистических пакетов корпорации SAS Institute[11].
В октябре 2011 года корпорация Oracle выпустила аппаратно-программный комплекс Big Data Appliance — NoSQL-кластер серверов массово-параллельной обработки, с интегрированным программными средствами на основе языка R и Apache Hadoop[12], а в феврале 2012 года язык встроен в Oracle Database[13]. В 2011 году массово-параллельный анализ средствами R реализован в аппаратно-программных комплексах Netezza корпорации IBM[14][15]; позднее язык поддержан в аппаратно-программном комплексе SAP Hana.
Также язык R поддерживают коммерческие программные среды Tibco Spotfire, SPSS (начиная с версии 16.0)[16], Statistica (начиная с версии 9.0), Platform Symphony, Power BI, SAS, Tableau.
CRAN
[править | править код]R и дополнительные пакеты распространяются через CRAN (акроним Comprehensive R Archive Network). По состоянию на конец 2010-х годов в мире доступны более 60 зеркал CRAN, головной узел расположен в Вене (Австрия)[17].
Информационный бюллетень R
[править | править код]Два-три раза в год выходит свободно распространяемый информационный журнал R Journal[18], включающий статьи о статистической обработке данных и разработке, нацеленный как на пользователей языка, так и разработчиков R. С января 2001 года по октябрь 2008 года он выходил в качестве бюллетеня R News[19].
Конференции
[править | править код]Одна из самых популярных конференций, посвящённых языку — useR! (The R User Conference), проходит ежегодно, начиная с 2004 года, собирает специалистов в различных областях.
Начиная с 2009 года каждой весной в Чикаго проводится конференция, посвящённая применению R в финансах (R/Finance: Applied Finance with R). В 2013 году прошла первая конференция, посвящённая применению R в страховании (R in Insurance).
Примечания
[править | править код]- ↑ A Brief History Архивная копия от 14 февраля 2012 на Wayback Machine R: Past and Future History, Ross Ihaka, Statistics Department, The University of Auckland, Auckland, New Zealand, available from the CRAN website
- ↑ 1 2 R: A Language for Data Analysis and Graphics
- ↑ Dalgaard P. 4.4.2 is released (англ.) — 2024.
- ↑ https://www.r-project.org/about.html
- ↑ 1 2 3 4 Free Software Directory
- ↑ R: The R Foundation . Дата обращения: 28 октября 2016. Архивировано 25 мая 2016 года.
- ↑ Teaching-with-R.pdf Архивная копия от 11 июня 2016 на Wayback Machine (англ.)
- ↑ R-Project on Solaris (недоступная ссылка) (недоступная ссылка с 13-05-2013 [4217 дней])
- ↑ InfoWorld Bossie Awards 2010 Архивировано 11 сентября 2014 года.
- ↑ CRAN - Contributed Packages . cran.r-project.org. Дата обращения: 23 января 2024. Архивировано 20 января 2024 года.
- ↑ 'Red Hat for stats' goes toe-to-toe with SAS . Дата обращения: 29 сентября 2017. Архивировано 7 июля 2017 года.
- ↑ Oracle rolls its own NoSQL and Hadoop . Дата обращения: 29 сентября 2017. Архивировано 7 июля 2017 года.
- ↑ Prickett Morgan, Timothy Oracle tucks R stats language into database (англ.). The Register (10 февраля 2012). Дата обращения: 10 февраля 2012. Архивировано из оригинала 3 июня 2012 года.
- ↑ Harris, Derrick (2011-03-141). "IBM Creates Big Data Frankenstein With Netezza-R Fusion" (англ.). The New York Times. Дата обращения: 19 ноября 2011.
{{cite news}}
: Проверьте значение даты:|date=
(справка) - ↑ Rosenberg, Dave Open-source 'R' gets Hadoop integration (англ.). CNet. CBS. Дата обращения: 19 ноября 2011. Архивировано из оригинала 17 февраля 2012 года.
- ↑ RSS Matters . Дата обращения: 19 ноября 2011. Архивировано 2 апреля 2012 года.
- ↑ Головной узел CRAN . Дата обращения: 7 апреля 2007. Архивировано 5 января 2008 года.
- ↑ R Journal . Дата обращения: 30 декабря 2010. Архивировано 17 февраля 2010 года.
- ↑ CRAN: R News . Дата обращения: 7 апреля 2007. Архивировано 28 мая 2007 года.
Литература
[править | править код]- Роберт Кабаков. R в действии = R in Action. — ДМК-Пресс, 2014. — 588 с. — ISBN 978-5-947060-077-1.
- Хэдли Уикем, Гарретт Гроулмунд. Язык R в задачах науки о данных: импорт, подготовка, обработка, визуализация и моделирование данных = R for Data Science: Visualize, Model, Transform, Tidy, and Import Data. — Вильямс, 2017. — 592 с. — ISBN 978-5-9909446-8-8, 978-1-491-91039-9.
- Норман Мэтлофф[англ.]. Искусство программирования на R. Погружение в большие данные = The Art of R Programming: А Tour of Statistical Software Design . — Питер, 2019. — 416 с. — ISBN 978-5-4461-1101-5.
Ссылки
[править | править код]- R-Project.org Архивная копия от 5 марта 2011 на Wayback Machine (англ.)
- Шипунов А. Б. R — объектно-ориентированная статистическая среда Архивная копия от 12 марта 2014 на Wayback Machine (рус.)
- Графическая галерея R — примеры графики, генерируемой R
- Золотых Н. Ю., Половинкин А. Н. Введение в R Архивная копия от 17 августа 2016 на Wayback Machine (рус.)
- Введение от Vincent Zoonekynd Архивная копия от 26 марта 2007 на Wayback Machine (англ.) — знакомит с работой R.
- R: A Language and Environment for Statistical Computing. Reference Index / The R Development Core Team Архивная копия от 2 июня 2016 на Wayback Machine (англ.)
- Обучающие курсы по R Архивная копия от 22 марта 2015 на Wayback Machine
- Языки программирования по алфавиту
- Языки программирования, появившиеся в 1993 году
- Язык программирования R
- Статистическое программное обеспечение
- Свободное математическое программное обеспечение
- Свободные компиляторы и интерпретаторы
- Программное обеспечение проекта GNU
- Предметно-ориентированные языки программирования