Предисловие

R – это язык программирования для обработки и анализа данных, распространяющийся бесплатно и дополняющийся пользователями.

Функции

Работа в R строится на использовании функций. Функция в R похожа на функцию в математике. Над аргументом функции производится некоторая операция, после чего возвращается результат. Функция может иметь несколько аргументов, указывающих не только на то, с каким объектом нужно проводить операции, но и как их проводить.

Чтобы узнать, что делает та или иная функция, сколько у нее аргументов и за что они отвечают, можно воспользоваться подсказками, встроенными в R, прописав вопросительный знак перед названием функции. Например, для функции квадратного корня:

?sqrt

R как калькулятор

Некоторые математические функции

10+320
## [1] 330
10*320
## [1] 3200

Функция квадратного корня:

sqrt(3200)
## [1] 56.56854

Обратите внимание, что аргументы функций указываются в скобках. Кроме того, важно помнить, что R чувствителен к регистру символов: это значит, что если написать функцию с большой буквы, она не будет распознана.

Функция модуля:

abs(-16)
## [1] 16

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

round(2/3)
## [1] 1

Можно указать, какое количество знаков после запятой мы хотим получить в результате. Для этого нужно прописать дополнительный аргумент внутри функции:

round(2/3, 4)
## [1] 0.6667

Обратите внимание, что в R, в отличие от Excel, целая часть от дробной отделяется точкой.

R может проводить вычисления не только над отдельными числами, но и над списками (и над таблицами). Создадим вектор, содержащий числа от 1 до 10, и сохраним его в память R. Слева указывается название вектора, справа – содержание, а стрелочка, <-, оператор присваивания, сохраняет содержание под указанным именем.

vec <- c(1:10)

Чтобы посмотреть на созданный объект, нужно просто вызвать его по названию.

vec 
##  [1]  1  2  3  4  5  6  7  8  9 10

Вектор – это объект R, который содержит элементы одного типа: либо только числа, либо только текст. А вот так выглядит вектор из текстовых элементов:

probability_party <- c("Bernoulli", "Gauss", "Moivre", "Laplace")
probability_party
## [1] "Bernoulli" "Gauss"     "Moivre"    "Laplace"

Операции над векторами в R производятся поэлементно. Давайте из каждого элемента вектора vec извлечем квадратный корень:

sqrt(vec)
##  [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751
##  [8] 2.828427 3.000000 3.162278

А теперь округлим до второго знака после запятой:

round(sqrt(vec), 2)
##  [1] 1.00 1.41 1.73 2.00 2.24 2.45 2.65 2.83 3.00 3.16

Экспоненциальная запись числа

В ряде резлуьтатов в будущем нам будет встречаться так называемая экспоненциальная запись чисел. Она используется для удобного отображения очень больших или очень маленьких чисел через произведение \(a\times 10^b\), где a – любое число, по модулю не меньшее 1, но меньшее 10. Например, мы можем представить миллион как произведение \(1\times 10^6\).

Давайте посмотрим на очень большое число, возведя число 16 в степень 16:

16^16
## [1] 1.844674e+19

R обозначет умножение на 10 в некоторой степени как e.

Теперь очень маленькое число. Обратите внимание на знак после e:

1/16^16
## [1] 5.421011e-20

Типы данных

В R существуют несколько базовых типов данных:

  1. logical – логические. Принимают значения TRUE или FALSE: “да” или “нет”, “правда” или “неправда”.
  2. integer – целочисленные.
  3. numeric – числовые, включая дробные значения.
  4. character – текстовые.

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

is.numeric(vec)
## [1] TRUE
is.character(vec)
## [1] FALSE
is.logical(vec)
## [1] FALSE

Можно узнать тип объекта:

class(vec)
## [1] "integer"

Вероятностные функции

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

Нормальное распределение

Для расчета функции распределения для нормального распределения используется функция pnorm(). Она имеет три аргумента: q – значение (или значения) случайной величины, для которых мы ищем функцию распределения; mean – математическое ожидание; sd – стандартное отклонение; lower.tail – поиск вероятности \(P(X<x)\). По дефолту (то есть, если не прописывать иное) аргументы функции принимают следующие значения: pnorm(q, mean=0, sd=1, lower.tail=TRUE), то есть, рассчитывается функция распределения для стандартного нормального распределения.

Рассчитаем \(F(1)=P(Z<1)\):

pnorm(1)
## [1] 0.8413447

Эта же функция позволяет рассчитать \(P(Z>1)\). Для этого нужно прописать аргумент lower.tail=FALSE, тем самым выбрав площадь под графиком функции плотности стандартного нормального распределения, которая правее рассматриваемого значения.

pnorm(1, lower.tail = FALSE)
## [1] 0.1586553

Мы можем работать не только со стандартным нормальным распределением:

pnorm(1, mean=-1, sd=3)
## [1] 0.7475075

Можно рассчитать значение функции плотности:

dnorm(1)
## [1] 0.2419707

Можно рассчитать квантиль заданного уровня:

qnorm(0.5)
## [1] 0
qnorm(0.95)
## [1] 1.644854
qnorm(0.05)
## [1] -1.644854

Биномиальное распределение

Все то же самое можно рассчитать и для биномиального распределения. Если мы хотим посчитать вероятность того, что количество успехов в серии испытаний Бернулли не превысит некоторого значения, нам потребуется функция pbinom(q, size, prob), где аргумент size задает количество испытаний, а prob – вероятность успеха в однократном испытании.

Пускай мы подбрасываем правильную монетку 5 раз, и нас интересует, с какой вероятностью мы получим не более двух орлов:

pbinom(2, 5, 0.5)
## [1] 0.5

Для того, чтобы посчитать вероятность точного числа успехов, нам понадобится функция dbinom(). Ровно два орла в серии из пяти подбрасываний выпадут с вероятностью:

dbinom(2, 5, 0.5)
## [1] 0.3125