Я сам изучал R в течение последних нескольких недель. 

В своей статье я рассказываю о языке программирования R и его главных концепциях, которые пригодятся каждому исследователю данных.

Мотивация

Сфера науки о данных и развивающихся вычислений требуют от нас всё время адаптироваться и вырабатывать новые навыки. Причина в том, что эта область меняется очень быстро. А ещё в ней в целом высокая планка требований. В профессиональной жизни каждого исследователя данных приходит время, когда нужно бы знать больше, чем один язык программирования. Так я и выбрал R.

В моих материалах вы узнаете обо всех ключевых областях и разберётесь в базовых понятиях. Предполагается, что вы, как читатели, вообще не знакомы с R или совсем немного в нем разбираетесь.

Я очень советую именно R по многим причинам. 

Автор фото Cris DiNoto, источник Unsplash

R становился всё известнее и известнее, пока не стал одним из самых популярных языков программирования. Его создали статистики (специалисты по статистике) для статистиков. Он хорошо сочетается с другими языками программирования, например с C++, Java, SQL. Более того, его воспринимают как язык, который отлично подходит для работы со статистикой. А в результате большое количество финансовых организаций и крупных вычислительных компаний применяют R в своих исследованиях и разработках. 

Python — язык для решения задач общего характера, а R — язык программирования для аналитики.

Задачи и содержание

Этот текст объяснит следующие ключевые области языка R:

  1. Что такое R?
  2. Как установить R?
  3. Где писать код на R?
  4. Что такое R-скрипт и R-пакет?
  5. Какие типы данных есть в R?
  6. Как декларировать переменные и их область действия в R?
  7. Как писать комментарии?
  8. Что такое векторы?
  9. Что такое матрица?
  10. Что собой представляют списки?
  11. Что такое датафреймы?
  12. Различные логические операции в R.
  13. Функции в R.
  14. Циклы в R.
  15. Считывание и запись внешних данных в R.
  16. Как производить статистические вычисления в R.
  17. Построение графиков и диаграмм в R.
  18. Объектно-ориентированное программирование в R.
  19. Знаменитые библиотеки R.
  20. Как установить внешние библиотеки R.

Приступим же!…

Я буду объяснять язык программирования, начиная с основ, в таком стиле, чтобы вам было легче разобраться. Стоит сказать, что ключ к прогрессу в разработке — это постоянная практика. Чем больше, чем лучше. 

Этот материал должен стать целостной базой для вас — читателей.

1. Что же такое R?

  • R — это бесплатный язык программирования с лицензией GNU. В сущности R — это статистическая среда.
  • R в основном используется для статистических вычислений. Он имеет набор алгоритмов, которые углубленно применяются в области машинного обучения. А конкретнее —  в анализе временных рядов, классификации, кластеризации, линейном моделировании и т.д. 
  • Также R — это среда, в которой есть набор программных пакетов, с которыми можно производить вычисления для построения диаграмм и для манипуляций с данными.
  • R значительно применяется в проектах статистических исследований.
  • R очень похож на другой язык программирования — S.
  • R компилируется и запускается на UNIX, Windows, MacOS, FreeBSD и Linux.
  • В R есть большое количество структур данных, операторов и параметров. Он включает многое: от массивов до матриц, от циклов до рекурсии вместе с интеграцией с другими ЯП, например с C, C++ и Fortran.
  • C можно использовать для обновления объектов в R напрямую. 
  • R можно дополнять новыми пакетами.
  • R — интерпретатор.
  • Авторы R вдохновлялись S+, так что, если вы знакомы с S, изучение R будет для вас простым следующим шагом.

Преимущества R:

Вдобавок к плюсам, о которых я написал выше:

  • R просто выучить.
  • В среде есть очень много бесплатных пакетов с открытым исходным кодом для статистики, аналитики и графики.
  • Богатство различных научных трудов вместе с их применением в R в вашем распоряжении.
  • Лучшие мировые университеты учат своих студентов R, следовательно, он стал принятым стандартом, продолжит расти и развиваться.
  • Широкие возможности интеграции с другими языками.
  • Огромная поддержка в сообществе специалистов.

Ограничения R:

Также есть и некоторые ограничения:

  • R не такой быстрый, как C++. К тому же, есть проблемы с его защищённостью и управлением памятью.
  • R имеет много пространств имен. Иногда такое впечатление, что их даже слишком много. Тем не менее ситуация улучшается. 
  • Так как R —  это статистический язык, то он не такой интуитивный, как Python, и в нём не так просто работать с ООП, как в Python.

Давайте уже начнём его изучать

А теперь я представлю вам язык R в формате кратких описательных разделов.

Автор фото Jonas Jacobsson, источник Unsplash

2. Как установить R?

Можете установить R на эти платформы:

  • Ubunto
  • Mac
  • Windows
  • Fedora
  • Debian
  • SLES
  • OpenSUSE

Первый шаг — загрузите R:

  • Откройте интернет-браузер.
  • Пройдите по ссылке www.r-project.org.
  • Последняя версия R на момент написания оригинала этой статьи была 3.6.3 (Holding the Windsock). Выпущена 2020–02–29.

Вот вам и линки:

3. Где писать на R?

Есть разные графические интерфейсы. Очень советую R-Studio.

Скриншот R-Studio

Загрузите десктопную версию RStudio:

Если вы работаете на Windows, в процессе установки R Studio по умолчанию попадет сюда:

C:\Program Files\RStudio

4. Что такое пакет R и скрипт R?

Это два ключевых компонента в языке. В этом разделе поверхностно расскажу о концепциях.

Пакет R

Так как R — это ЯП с открытым кодом, важно понимать, что тут подразумевается под пакетом. Пакет в сущности группирует и упорядочивает код, а также другие функции. Пакет — это библиотека, в которой содержится большое количество файлов. 

Специалисты по данным могут писать и делиться своим кодом с другими. Будь это их собственный код с нуля или расширение пакетов других авторов. Пакеты позволяют специалистам по данным переиспользовать код и распространять его среди остальных.

Пакеты созданы, чтобы контейнировать функции и наборы данных.

Специалист по данным может создать пакет, чтобы упорядочить код, документацию, тесты, наборы данных и так далее, и потом этими пакетами можно делиться с другими людьми.

В интернете в открытом доступе есть десятки тысяч пакетов R. Эти пакеты собраны в центральном репозитории. Вообще есть разные репозитории. Это и CRAN, и Bioconductor, и любимый Github.

Одно хранилище заслуживает отдельного упоминания. Это CRAN. Это сеть серверов, которые хранят большое количество версий кода и документации для R. 

Пакет содержит файл с описанием, где нужно указать дату, зависимости, автора и версию пакета, а также другие данные. Файл-описание помогает пользователям получить важную информацию о пакете. 

Чтобы загрузить пакет, напечатайте:

library(имя пакета)

Чтобы пользоваться функциональностью пакета, напишите в его имени::название функции.

Например, если мы хотим применить функцию “AdBCDOne” из пакета “carat”, можем сделать следующее: 

library(carat)
carat::AdBCDOne()

R Script

Скрипт R — это место, где специалист по данным может писать статистический код. Это текстовый файл с расширением .R, например мы может назвать скрипт tutorial.R.

Можем создать много скриптов в пакете.

В качестве примера, если вы создали два скрипта R:

  1. blog.R (для блога)
  2. publication.R (для публикации)

И если вы хотите вызвать функции publication.R в blog.R, то вам стоит пользоваться командой source(“target R script”). Она импортирует publication.R в blog.R:

source("publication.R")

Создаём пакет скрипта

Процесс относительно простой. В сущности вот, что нужно сделать:

  1. Создайте файл описания.
  2. Создайте R.scripts и добавьте любые датасеты, документацию, тесты, которые должны быть в этом пакете.
  3. Напишите свои функции в скриптах R.
  4. Можем применить devtools и roxygen2, чтобы создать пакеты R с помощью такой команды:
create_package("имя пакета")

5. Какие бывают типы данных в R ?

Очень важно разобраться в разных типах данных и структурах в R. Так вы сможете пользоваться языком эффективно. В этом разделе я опишу концепции.

Типы данных

Вот базовые типы данных в R:

  1. символ (character): может быть таким “abc” или таким “a”
  2. целочисленный (integer): например 5L
  3. числовой (numeric): например 10.5
  4. логический (logical): TRUE или FALSE
  5. комплексный (complex): например 5+4i

Ещё можем пользоваться командой typeof(variable), чтобы определить тип переменной. 

Чтобы найти метаданные (атрибуты типа), используйте команду attributes(variable).

Структуры данных

В R достаточно много структур данных. Привожу самые важные:

  1. Вектор (vector): самая важная структура, которая в сущности является набором элементов.
  2. Матрица (matrix): похожая на таблицу структура со строками и колонками
  3. Датафрейм (data frame): табличная структура для статистических операций
  4. Списки (lists): набор, в котором может быть комбинация типов данных.
  5. Факторы (factors): для представления категориальных данных.

Я расскажу обо всех этих типах и структурах данных, так что начинаем строить фундамент.

6. Как объявлять переменные?

Мы можем создать переменную и присвоить ей значение. Переменная может иметь любой тип данных и структуру данных, которые я привел выше. Есть, конечно, и другие структуры данных. Дополнительно разработчик может создавать и свои собственные пользовательские классы. 

Переменная нужна, чтобы сохранять значение, которое может меняться в вашем коде. 

Чтобы понять, важно запомнить, что такое окружение в R. В сущности окружение — это место, где хранятся переменные. Это набор пар, где первый элемент — это символ (переменная), а второй — её значение. 

Окружение имеет иерархическую структуру (похожую на дерево). Следовательно, окружение может иметь родителя и множество дочерних ответвлений. Корневое окружение — это окружение без родителя. 

Надо декларировать переменную и присвоить ей значение при помощи следующего:

x <- "my variable"
print(x)

После этого значение “my variable” будет присвоено переменной x. Функция print() выведет значение x, которое равно “my variable”.

Каждый раз, когда мы объявляем переменную и вызываем её, она ищется в текущем окружении, а также рекурсивно ищется в родительских окружениях до тех пор, пока значение не будет найдено.

Чтобы создать набор целых чисел, мы можем сделать следующее:

coll <- 1:5
print(coll)

1 — первое значение, а 5 — последнее значение из набора. 

В результате выведутся числа от 1 до 5. 

Помните, что IDE R-Studio отслеживает переменные:

Скриншот R Studio

Функцию ls() можно писать, чтобы показать переменные и функции в текущем окружении.

7. Как писать комментарии?

Комментарии нужны в коде, чтобы помогать понимать его тем, кто будет с ним разбираться. Читателям, другим специалистам по данным и самому себе. Бывает и такое. 

Помните, что нужно всегда убеждаться в том, что комментарии не загрязняют ваши скрипты.

Можем добавить комментарий одной строкой:

#комментарий на одну строку

Можем добавить комментарий в несколько строк при помощи двойных кавычек:

"комментарий на 
несколько строк
"

Памятка: в R-Studio выделите код, который вы собираетесь закомментировать и нажмите сочетание клавиш Ctrl+Shift+C.

Так вы автоматически сделаете нужную часть программы комментарием.

8. Что такое векторы?

Вектор считается одной из самых важных структур данных в R. В сущности вектор представляет собой набор элементов, где у всех элементов должен быть одинаковый тип данных: например, только логический (истинно/ложно — TRUE/FALSE), числовой, знаковый.

Также можем создать пустой вектор:

x <- vector()

По умолчанию тип вектора логический. По команде ниже выведется слово “logical”, так как это и есть тип данных вектора:

typeof(x)

Чтобы создать вектор со своими элементами, пишите функцию конкатенации (объединения строк): 

x <- c("Farhad", "Malik", "FinTechExplained")
print(x)

Результат выполнения этого кода будет таким:

[1] “Farhad”
[2] “Malik”
[3] “FinTechExplained”

Если мы захотим найти длину вектора, можем воспользоваться функцией length():

length(x)

Результат вывода строки выше будет 3. Потому что в заданном векторе x 3 элемента. Чтобы добавить элементы в вектор, можем комбинировать элемент с вектором. 

Например, чтобы добавить слово “world” к началу вектора с одним элементом слова “hello”, нужно написать так:

x <- c("hello")
x <- c("world", x)
print(x)

В результате напечатается “world” “hello”.

Если мы смешиваем типы элементов, то R в свою очередь будет приспосабливать тип вектора в ответ на это. Тип вектора (режим) будет становиться таким, каким должен быть по своему расчёту, чтобы подходить этому вектору:

another_vec <- c("test", TRUE)
print(typeof(another_vec))

И хотя второй элемент имеет логическое значение, тип будет выведен как “character” (символ). 

Над векторами можно производить операции.

Для примера, вот вам умножение скаляра на вектор:

x <- c(1,2,3)
y <- x*2
print(y)

В результате напечатается 2,4,6.

Также можем сложить два вектора:

x <- c(1,2,3)
y <- c(4,5,6)
z <- x+y
print(z)

Результат будет: 5 7 9

Если векторы — это знаки и мы хотим сложить их вместе, то:

x <- c("F","A","C")
y <- c("G","E","D")
z <- x+y
print(z)

Это выведет:

Error in x + y : non-numeric argument to binary operator (ошибка в выражении x + y: нечисловой аргумент для бинарного оператора).

Продолжение следует…

Читайте также:


Перевод статьи Farhad Malik: R — Statistical Programming Language