Язык программирования R — это популярный язык программирования статистики, который в основном используется в естественных науках и математике для статистических вычислений. R — интересный язык с ярко выраженными особенностями. Как только вы привыкнете к этому, работать с языком будет очень весело.
- Что отличает «Язык программирования R»?
- R — язык программирования статистики и данных
- R поддерживает ООП и функциональное программирование.
- Как работает программирование на R?
- Как выполняется R-код?
- Каков синтаксис языка программирования R?
- Как управляющие структуры работают в программировании на R?
- Что нужно для начала программирования на R?
- Для каких проектов подходит R?
Что отличает «Язык программирования R»?
R не является языком программирования «общего назначения», как Java или Python. Скорее, язык обслуживает особую область применения статистических вычислений, по-немецки «статистические вычисления». В этой области R уже много лет занимает место среди 20 самых популярных языков программирования, несмотря на сильную конкуренцию.
Что делает R особенным, так это не только сам язык, но и весь пакет. Например, программирование на R обычно происходит в интерактивной среде, дополненной циклом чтения-оценки-печати (REPL) и встроенной справкой. Язык с открытым исходным кодом поддерживается хорошо развитой экосистемой; сообщество поддерживает репозиторий пакетов The Comprehensive R Archive Network (CRAN). Также постоянно добавляются наборы данных и научные официальные документы о новых подходах и пакетах.
В совокупности эти свойства делают R идеальной средой программирования для статистики и обработки данных. Интерактивный характер среды, в частности, побуждает вас проводить исследования и позволяет изучать язык и базовую математику в игровой форме.
R — язык программирования статистики и данных
R — это язык программирования статистики, и он знает такие понятия, как нормальное распределение, статистические тесты, модели и регрессия. Помимо R существует ряд сопоставимых научных языков — помимо коммерческого продукта Matlab, особо стоит упомянуть младший язык Julia. Еще одним сильным конкурентом последних лет является Python.
В отличие от Python, R имеет встроенную поддержку статистического программирования. Существенная разница заключается в том, как язык работает со значениями. Данные обычно во множественном числе, поэтому в R принято вычислять с несколькими значениями сразу. В то время как почти во всех других языках самым простым значением является одно число, в R это особый случай.
Давайте проиллюстрируем подход R к обработке данных на простом примере. Математические операции можно выполнять на любом языке программирования. Это также имеет место в Р. Складываем два числа:
# returns 15 10 + 5
Пока ничего необычного. Однако в R та же операция сложения может быть применена к списку чисел. Мы объединяем два числа в список и добавляем постоянное значение:
# returns 15, 25 c(10, 20) + 5
Удивительный результат для опытных программистов. Даже современный динамический язык, такой как Python, не позволяет этого:
# throws an error [10, 20] + 5
В R вы даже можете добавить два списка. Элементы списка не объединяются в список, но для каждого элемента выполняется соответствующая математическая операция :
# returns 42, 69 c(40, 60) + c(2, 9)
В более старых языках, таких как Java или C++, вам нужен цикл для обработки нескольких элементов списка. Потому что эти языки проводят строгое различие между отдельными значениями, скалярами, и составными структурами данных, векторами. В R вектор является основной единицей ; скаляр — это особый случай в программировании на R как одноэлементный вектор.
Что особенного в статистике, так это то, что знаменитая математическая точность была смягчена. Расчет ведется с неопределенностью и несовершенными данными, полученными из реальности. Что-то всегда может пойти не так; к счастью, R несколько отказоустойчив. Язык может обрабатывать отсутствующие значения без сбоя работающего скрипта.
Давайте проиллюстрируем надежность языка на примере. Обычно в любом языке программирования сбой может быть вызван делением числа на ноль. Однако R оставляет это без внимания; значение Inf отмечается как результат деления на ноль, который можно легко отфильтровать из данных на более позднем этапе очистки:
# list of divisors, containing zero divisors = c(2, 4, 0, 10) # returns `c(50, 25, Inf, 10)` quotients = 100 / divisors # filter out Inf; returns `c(50, 25, 10)` cleaned_quotients = quotients[quotients != Inf]
R поддерживает ООП и функциональное программирование.
Программирование с помощью R чрезвычайно гибкое; язык не может быть четко классифицирован в иерархии ((парадигмы программирования|веб-сайты/веб-разработка/парадигмы программирования/)). Он поддерживается системой ООП, но вы не найдете обычных определений классов. Функциональный и императивный подходы в основном используются в повседневном использовании. Особенно ярко выражены функциональные особенности, которые хорошо подходят для обработки данных.
Подобно JavaScript, объектная система отличается своей гибкостью. Подобно Python, это общие функции, которые можно применять к объектам разных типов. Например, в программировании на R есть функция length(), аналогичная len() в Python.
Как работает программирование на R?
Программирование на R основано на данных, потому что на них основана статистика. Чтобы разработать решение проблемы в R, вам нужен набор данных. К сожалению, этого часто не существует на момент разработки. Поэтому вы часто начинаете проект программирования R с моделирования данных. Мы пишем код, тестируем функциональность и позже обмениваем тестовые данные на реальные данные.
Как выполняется R-код?
Подобно Ruby или Python, R — это динамический интерпретируемый язык сценариев. В отличие от языка программирования C, в R нет разделения исходного текста и исполняемого кода. Разработка в основном происходит интерактивно, т.е. ЧАС. вы передаете интерпретатору построчно исходный код, который немедленно выполняется. Переменные генерируются автоматически по мере необходимости, а имена привязываются во время выполнения.
Эффект от этого интерактивного и динамичного программирования сравним с нахождением внутри работающей программы. Уже созданные объекты можно исследовать и модифицировать, а новые идеи сразу же тестировать. Команда help дает доступ к синтаксису и документации по функциям:
# view help for `for` syntax help('for') # view help for `c()` function help(c)
Файлы сценариев могут быть динамически загружены из интерпретатора. Исходная команда работает как эквивалентная команда оболочки. При вызове содержимое исходного текстового файла R считывается и передается в текущий сеанс:
source('path/to/file.r')
Каков синтаксис языка программирования R?
Язык сценариев использует фигурные скобки, известные из C и Java, для разделения тел функций и операторов управления. В отличие от Python, код с отступом не влияет на его функцию. Как и в Ruby и Python, комментарии начинаются с решётки, точка с запятой в конце оператора не нужна.
Имея небольшой опыт, вы сможете сразу распознать R-код, потому что язык имеет некоторые особенности. Помимо знака равенства в качестве оператора присваивания, в программировании на R для присваивания используются два стреловидных оператора. Чтобы изменить направление задания:
# equivalent assignments age <- 42 'Jack' -> name person = c(age, name)
Другая типичная особенность кода R — своего рода нотация псевдообъекта, аналогичная object.method() :
# test if argument is a number is.numeric(42)
Функция is.numeric отображается как метод numeric(), принадлежащий объекту с именем is. Однако, это не так. В программировании на R точка является обычным символом ; функция также может называться is_numeric вместо is.numeric.
Функция конкатенации c() используется для генерации векторов, повсеместно используемых в программировании на R :
people.ages <- c(42, 51, 69)
Если вы применяете функцию к векторам, они объединяются в непрерывный вектор :
# yields `c(1, 2, 3, 4)` c(c(1, 2), c(3, 4))
В отличие от большинства языков программирования, в R индексация элементов вектора начинается с 1. Поначалу к этому нужно привыкнуть, но это помогает избежать ужасных ошибок, возникающих при переходе на один. Самый высокий индекс вектора соответствует длине вектора:
# create a vector of names people <- c('Jack', 'Jim', 'John') # access the first name people[1] == 'Jack' # access the last name people[length(people)] == 'John'
Подобно Python, в программировании на R также используется концепция нарезки. Срез можно использовать для индексации части вектора. Это основано на последовательностях, изначально поддерживаемых в R. Генерируем последовательность чисел и выбираем часть:
# create vector of numbers between 42 and 69 nums = seq(42, 69) # equivalent assignment using sequence notation nums = 42:69 # using a sequence, slice elements 3 through 7 sliced = nums[3:7]
Как управляющие структуры работают в программировании на R?
Основные операции в программировании на R определены для векторов. Часто циклы не требуются, а выполняется операция непосредственно над всем вектором, в результате чего изменяются отдельные элементы. Возводим в квадрат первые десять положительных чисел без цикла:
nums <- seq(10) squares <- nums ** 2 squares[3] == 9
При использовании R For-Loop следует отметить, что он работает не так, как в C, Java или JavaScript. Не проходя через переменную цикла, выполняется итерация непосредственно по элементам, как в Python:
people = c('Jim', 'Jack', 'John') for (person in people) { print(paste('Here comes', person, sep = ' ')) }
Конечно, в R есть ветвь if-else в качестве базовой управляющей структуры. Однако во многих случаях это также можно заменить функциями фильтрации или логической индексацией векторов. Мы создаем вектор возрастов и фильтруем лиц старше и младше 18 лет в двух переменных соответственно, без необходимости цикла или ветвления:
# create 20 ages between 1 and 99 ages = as.integer(runif(20, 1, 99)) # filter adults adults = ages[ages > 18] # filter children children = ages[ages < 18] # make sure everyone is accounted for length(adults) + length(children) == length(ages)
Для полноты эквивалентный подход с управляющими структурами :
# create 20 ages between 1 and 99 ages = as.integer(runif(20, 1, 99)) # start with empty vectors adults = c() children = c() # populate vectors for (age in ages) { if (age > 18) { adults = c(adults, age) } else { children = c(children, age) } }
Что нужно для начала программирования на R?
Чтобы начать программирование на R, вам нужна только локальная установка R. Установщики для всех основных операционных систем доступны для скачивания. Стандартная установка R включает в себя интерпретатор GUI с REPL, встроенную справку и редактор. Для продуктивного кодирования следует использовать один из установленных редакторов кода. R -Studio — привлекательная альтернатива среде R.
Для каких проектов подходит R?
Программирование R особенно часто используется в науке и исследованиях, например, в биоинформатике и машинном обучении. Однако язык подходит для всех проектов, использующих статистическое моделирование или математические модели. R слаб только для чистой обработки текста; У Python здесь явное преимущество.
Обычные расчеты и визуализации в электронных таблицах можно заменить R-кодом. Вы получаете выгоду от четкого разделения задач, поскольку данные и код не смешиваются в ячейках. Это позволяет написать код один раз и применить его к нескольким наборам данных. Кроме того, отсутствует риск перезаписи формулы ячейки при внесении изменений вручную.
Для научных публикаций R считается золотым стандартом. Разделение кода и данных обеспечивает научную воспроизводимость. Зрелая экосистема инструментов и пакетов позволяет создавать эффективные конвейеры публикаций. Оценки и визуализации автоматически генерируются из кода и данных и интегрируются в высококачественные документы LaTeX или RMarkdown.








