Язык программирования R: что это, для чего нужен и как начать

Язык программирования R: что это, для чего нужен и как начать Полезное

R — это язык программирования и одноименная среда для статистических вычислений, анализа данных и построения графиков. Код на R выполняет интерпретатор: команду можно ввести в консоль и сразу увидеть результат, без отдельной компиляции. R распространяется бесплатно под лицензией GNU GPL и работает на Windows, macOS и Linux.

Ниже — для каких задач R подходит лучше других языков, чем R отличается от RStudio, как установить обе программы и какие команды выполнить в первые полчаса. Примеры кода прогнаны в R 4.3.3, вывод скопирован из консоли. На сентябрь 2026 актуальна ветка R 4.6 (4.6.1 вышла в июне 2026); для функций из этой статьи в списке изменений версий 4.4-4.6 несовместимых правок нет.

Мини-словарь: R, RStudio, CRAN, пакет

Новички часто путают эти четыре вещи, поэтому сразу разведем их.

Термин Что это Нужно ли ставить отдельно
R Язык и интерпретатор: то, что реально выполняет код Да, в первую очередь
RStudio Среда разработки (IDE) от компании Posit: редактор, консоль, окно графиков. Сама код не выполняет, а передает его R Да, вторым шагом, по желанию
CRAN Официальный архив R: там лежат установщики R и тысячи пакетов Нет, это сайт-хранилище
Пакет Набор функций сверх базового R (например, ggplot2 для графиков) Да, командой install.packages()

Главное следствие: RStudio без установленного R не запустит ни одной строки кода. Порядок установки всегда такой — сначала R, потом IDE.

Для чего нужен язык R

R создали Росс Айхэка и Роберт Джентлмен в Оклендском университете в начале 1990-х как свободную реализацию языка S. Отсюда его специализация: он проектировался для статистиков, а не для разработчиков приложений.

Где R силен:

  • Статистика и эксперименты. Регрессии, t-тесты, дисперсионный анализ, A/B-тесты — в базовой поставке, без установки пакетов.
  • Анализ данных и отчеты. Таблицы (data.frame), группировки, сводки; отчет можно собрать в документ вместе с кодом и графиками.
  • Визуализация. Базовая графика плюс ggplot2 — один из самых распространенных инструментов для научных графиков.
  • Наука. Биоинформатика (репозиторий пакетов Bioconductor), эконометрика, эпидемиология, социология.

Где R обычно не выбирают: веб-бэкенд, мобильные приложения, игры, высоконагруженные сервисы. Технически на R можно поднять веб-приложение (пакет shiny) или API, но это ниша для дашбордов аналитиков, а не замена языкам общего назначения.

R или Python для анализа данных

Выбор зависит от задачи и команды, а не от «какой язык лучше».

Задача Что обычно берут Почему
Статистический анализ, научная статья R Классические тесты и модели в базе, много узкоспециальных пакетов
Аналитика в продуктовой компании Python или R Зависит от стека команды: SQL + Python встречается чаще
Машинное обучение в продакшене Python Экосистема ML и интеграция с сервисами
Графики для публикации R (ggplot2) или Python Оба справляются, в R код графиков обычно короче

Как установить R и RStudio

  1. Установить R. На странице CRAN (адрес cran.r-project.org) выбрать свою ОС. Windows: раздел base, обычный установщик. macOS: пакет .pkg, причем для Mac на Apple Silicon (процессоры M-серии, сборка arm64) и для Intel (x86_64) установщики разные. Linux (Ubuntu/Debian): sudo apt install r-base — в репозитории дистрибутива версия может отставать, свежую дает apt-репозиторий CRAN.
  2. Проверить. Открыть программу R (или в терминале набрать R) и ввести R.version.string — в ответ придет строка с номером версии.
  3. Установить RStudio Desktop с сайта Posit (бесплатная версия). При запуске RStudio сама находит установленный R.
  4. Создать проект. В RStudio: File -> New Project -> New Directory. Проект задает рабочую папку, и относительные пути к файлам данных начинают работать предсказуемо.

Новые минорные версии R (4.4, 4.5 и так далее) выходят примерно раз в год, весной. Для учебы подходит любая актуальная версия ветки 4.x: базовые функции из этой статьи в них работают одинаково.

Первые команды в консоли R

Минимальный набор, который стоит набрать руками (не копировать) в консоли RStudio:

2 + 2
x <- c(12, 15, 9, 20, 14)
x * 2
mean(x)
x[1]
x[x > 13]
length(x)

Результат в консоли:

[1] 4
[1] 24 30 18 40 28
[1] 14
[1] 12
[1] 15 20 14
[1] 5

Что здесь важно:

  • <- — оператор присваивания. Знак = тоже работает, но в сообществе принят <-.
  • c() склеивает значения в вектор — основную структуру R. Даже одно число — это вектор длины 1, отсюда [1] перед каждым ответом (номер первого элемента в строке вывода).
  • x * 2 умножает сразу все элементы, без цикла. Это и есть векторизация: большинство операций в R применяются к вектору целиком.
  • Индексы начинаются с 1, а не с 0, как в Python или C: x[1] — первый элемент.
  • x[x > 13] — фильтр: условие дает вектор TRUE/FALSE, и R оставляет элементы, где TRUE.

Справка по любой функции — ?mean или help(mean), она откроется во вкладке Help.

Таблицы: data.frame и первая сводка

Данные в R чаще всего живут в data.frame — таблице, где каждый столбец это вектор одного типа. Создадим файл sales.csv в папке проекта:

city,orders,cheque
Москва,120,1500
Казань,45,1200
Москва,98,1650
Пермь,30,1100
Казань,61,1250
Москва,110,1580

И скрипт analysis.R (в RStudio: File -> New File -> R Script, запуск всего файла — кнопка Source):

# analysis.R - первый законченный скрипт на R
sales <- read.csv("sales.csv", encoding = "UTF-8")

str(sales)
by_city <- aggregate(orders ~ city, data = sales, FUN = sum)
by_city <- by_city[order(-by_city$orders), ]
print(by_city)

png("orders_by_city.png", width = 800, height = 500)
barplot(by_city$orders, names.arg = by_city$city,
        main = "Заказы по городам", ylab = "Заказов")
invisible(dev.off())
cat("График сохранен:", file.exists("orders_by_city.png"), "\n")

Вывод:

'data.frame':   6 obs. of  3 variables:
 $ city  : chr  "Москва" "Казань" "Москва" "Пермь" ...
 $ orders: int  120 45 98 30 61 110
 $ cheque: int  1500 1200 1650 1100 1250 1580
    city orders
2 Москва    328
1 Казань    106
3  Пермь     30
График сохранен: TRUE

str() показывает структуру: 6 строк, 3 столбца и тип каждого (chr — строки, int — целые). aggregate() суммирует заказы по городам, order(-...) сортирует по убыванию. В папке проекта появится файл orders_by_city.png со столбчатой диаграммой. Это уже законченный артефакт: данные -> сводка -> график.

Статистика в базовом R: регрессия и t-тест

В R встроены учебные наборы данных. mtcars — 32 автомобиля с расходом топлива (mpg), массой (wt), типом коробки (am: 0 — автомат, 1 — механика).

model <- lm(mpg ~ wt, data = mtcars)
coef(model)
summary(model)$r.squared
t.test(mpg ~ am, data = mtcars)$p.value
(Intercept)          wt 
  37.285126   -5.344472 
[1] 0.7528328
[1] 0.001373638

lm() строит линейную регрессию: каждая тысяча фунтов массы связана с падением примерно на 5.3 мили на галлон, а масса объясняет около 75% разброса расхода (R-квадрат). t.test() сравнивает средний расход у автоматов и механик; p-value около 0.0014 говорит, что разница вряд ли случайна.

Граница вывода: это связь в конкретной выборке из 32 машин, а не причинный эффект. Регрессия с одним признаком не учитывает, что тяжелые машины обычно еще и мощнее. Запись mpg ~ wt (формула «что объясняем ~ чем объясняем») используется в R повсюду: в lm(), t.test(), aggregate().

Пакеты: установка и подключение

Пакет ставится один раз, а подключается в каждой новой сессии:

install.packages("ggplot2")  # скачать с CRAN, один раз
library(ggplot2)             # подключить в текущей сессии

Частые стартовые пакеты: ggplot2 (графики), dplyr и tidyr (обработка таблиц), readr (чтение файлов), data.table (быстрая работа с большими таблицами). Первые четыре входят в набор tidyverse, который ставится одной командой.

Типичные ошибки новичка

Функция из неподключенного пакета.

ggplot(mtcars)
Error in ggplot(mtcars) : could not find function "ggplot"

Исправление: выполнить library(ggplot2). Если в ответ пришло there is no package called ‘ggplot2’ (R берет имя пакета в типографские кавычки), пакет еще не установлен — сначала install.packages("ggplot2").

Пропуски NA ломают расчет.

temps <- c(21.5, 23.0, NA, 19.8)
mean(temps)
mean(temps, na.rm = TRUE)
[1] NA
[1] 21.43333

Любая арифметика с NA дает NA. Параметр na.rm = TRUE исключает пропуски, но решение осознанное: сначала стоит посчитать, сколько их (sum(is.na(temps))).

Вектор молча сменил тип.

v <- c(1, "2", 3)
class(v)
as.numeric(c("10", "7,5", "abc"))
[1] "character"
[1] 10 NA NA
Warning message:
NAs introduced by coercion 

Вектор хранит один тип, поэтому одна строка превратила все числа в строки. А при обратном преобразовании «7,5» с запятой стало NA: R ждет десятичную точку. Для CSV с запятыми в числах и разделителем «;» есть read.csv2().

Векторы разной длины. 1:6 + 1:4 выполнится, но с предупреждением longer object length is not a multiple of shorter object length: короткий вектор повторяется по кругу. Предупреждение в R — не мелочь, а повод проверить данные.

Если не получилось

  • RStudio пишет, что не нашла R. R не установлен или установлен после RStudio — поставить R и перезапустить RStudio (путь можно указать в Tools -> Global Options -> General).
  • cannot open file 'sales.csv'. Файл лежит не в рабочей папке. Проверить getwd(), открыть проект или указать полный путь.
  • Кириллица превратилась в «кракозябры». Файл сохранен не в UTF-8: пересохранить в UTF-8 или указать кодировку в read.csv(..., fileEncoding = "cp1251").
  • install.packages() на Linux падает с ошибкой компиляции. Пакет собирается из исходников, и не хватает системных библиотек (например, libcurl4-openssl-dev, libxml2-dev в Ubuntu). Название нужной библиотеки обычно есть в тексте ошибки.

Выводы

  • R — язык и интерпретатор для статистики, анализа данных и графиков; RStudio — отдельная IDE, которая без установленного R не работает.
  • Установка: сначала R с CRAN, потом RStudio Desktop, затем проект в RStudio для предсказуемых путей к файлам.
  • Базовые идеи на старте: присваивание <-, векторы и векторизация, индексы с 1, data.frame для таблиц.
  • Регрессия, t-тест и графики доступны в базовом R без пакетов; пакеты ставятся install.packages() один раз и подключаются library() в каждой сессии.
  • Большинство первых ошибок — неподключенный пакет, NA в данных, смешение типов и неверная рабочая папка.

Где применяется / связь с практикой

R чаще всего встречается в аналитике исследований и экспериментов, в научных командах и там, где отчет строится вокруг статистической проверки гипотез. Для аналитика данных R обычно идет в связке с SQL и одним из BI-инструментов, а умение объяснить результат теста или регрессии ценится не меньше, чем сам код.

Освойте тему на практике

Если хочется освоить работу с данными системно — от выгрузки и очистки до статистики и визуализации, — посмотрите программу курса «Аналитик данных». Разобрать отдельные темы бесплатно можно на открытых уроках Otus.

FAQ

Нужно ли знать математику, чтобы начать учить R?
Для первых команд и таблиц — нет. Для осмысленной работы с регрессиями и тестами нужна базовая статистика: среднее, дисперсия, p-value, доверительный интервал.

R медленный?
Векторизованный код на R работает быстро, потому что тяжелые операции выполняются в скомпилированном C и Fortran. Медленными обычно оказываются циклы по элементам, которые можно заменить векторной операцией, или очень большие таблицы, для которых есть data.table.

Можно ли вызывать R из Python и наоборот?
Да: из Python — через пакет rpy2, из R — через пакет reticulate. Это удобно, когда часть команды пишет на одном языке, а нужная модель есть только в другом.

OTUS Журнал
Скидка 5% 12-19 октября на курсы (popup)
Бесплатные открытые уроки (поп-ап)