Jan 16: R intro

Запись занятия 16 января:

Все записи организованы в плейлист

About R

short history

  • 1976: S language
  • 1991-1993: R language by Ross Ihaka and Robert Gentleman
  • 2000: stable beta
  • 2011: RStudio
  • 2011: Oracle R Enterprise
  • 2015: Microsoft bought Revolution R
  • 2017: Just-in-time compilations
  • 2018: Speed improvements


R ecosystem


Синтаксис

структура выражения

result <- sqrt(x = 4)

sqrt() - функция. sqrt - название функции, в () указываются аргументы, к которым будет применяться функция с таким названием.

x - обозначение аргумента функции (в разных функциях аргументы могут называться по-разному)

4 - значение, которое мы передаем в аргумент функции (к коротому будет применена функция)

<- - знак присвоения

result - объект, в который мы записываем результат выполнения функции. название объектов может быть разным (лучше придерживаться style guide при нейминге)


вывод на печать

Прямое указание:

print(result)
## [1] 2

Можно просто вызвать сам объект:

result
## [1] 2


присвоение

Оператор <- - это оператор присвоения. Если до этого объект не был создан, то таким образом мы создадим объект x, в котором содержится значение 5. Если до этого объект существовал, то ему будет присвоено новое значение.

x <- 5
print(x)
## [1] 5

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

x <- 5
result <- sqrt(x = 4)

Если нет присвоения, а только простой вызов функции, то результат будет напечатан, как если это был какой-то объект.

sqrt(x = 4)
## [1] 2


операторы присвоения

  • <- (основной оператор)

  • = (не рекомендуется, если только очень-очень хочется)

  • -> (существует, но использовать крайне не рекомендуется)

  • <<-, ->> (надо понимать, когда использовать, встречаются редко, лучше использовать assign())


арифметические операторы

В R помимо оператора присвоения есть другие операторы, в частности, арифметические операторы, операторы сравнения или логического выбора. Операторы сравнения или логические операторы обычно используются при необходимости указать какие-то условия для выбора элементов вектора или таблицы, а также в конструкциях if/else.

  • Сложение: +

  • Вычитание: -

  • Умножение: *

  • Деление: /

  • Возведение в степень: ^, **

  • Остаток от деления: %% (5 %% 2 дает 1)

  • Неполное частное деления: %/% (5 %/% 2 дает 2)


операторы сравнения

  • тождество (равенство): ==

  • не равно: !=

  • больше/меньше или равно: >=, <=

  • пропущено ли: is.na() (проверяет, является ли значение пропущенным, NA)


логические операторы

  • И: &, &&

  • ИЛИ: |, ||

  • НЕ (Обратно): ! (TRUE превращает в FALSE и наоборот)


комментарии и кавычки

  • #: строка, которая идет после этого знака, считается комментарием и не выполняется. Используется для того, чтобы прокомментировать код или скрыть от выполнения часть кода.

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

  • ``:обратные апострофы, используются в редких случаях, обычно в RMarkdown, инфиксных операторах или кириллических названиях объектов.


Окружение и подсказки

Полезные функции для работы с окружением

При работе с R:

  • install.packages('pkg') - установить пакет pkg или список пакетов. Делается однократно при настройке R

  • library('pkg') - подключение установленного пакета - делается при каждом новом запуске сессии, если этот пакет планируется использовать

  • getwd() - узнать адрес рабочей папки

  • setwd() - никогда не использовать! Это мешает при работе с несколькими коллегами, может вызвать сбои при каких-то изменениях в структуре папок ну и в целом дурной тон. Лучше использовать проекты в RStudio, которые формируют отдельную папку под каждый проект.

  • ls() - возвращает список созданных объектов рабочего окружения

  • rm() - удалить какой-нибудь объект

  • rm(list = ls()) - удалить все объекты рабочего окружения


help


Стандартные ошибки в синтаксисе

  • пропущенная / лишняя запятая

  • пропущенная / лишняя / другого типа скобка

Object not found

  • опечатки (пропуск буквы, удвоение буквы, разный регистр, c кириллическая)

  • no object / file / function / package


Векторы

Простой набор объектов одного атомарного типа.

атомарные типы данных

  • numeric (integer для целых и double как аналог numeric). Используется для численных значений. Некоторые функций, в частности, median() на вход требуют объекты типа double.
  • character. Используется для текстовых значений. Любой набор знаков, заключенный в кавычки, в R воспринимается как текстовое значение.
  • logical. Значения TRUE/FALSE.


NA, NaN, Inf

  • NA - not avaliable. Ситуация, когда значение пропущено. Например, для какой-то строки в колонке таблицы нет значения.
  • NaN, Inf - not a number и infinite соответственно. Появляются при некорректных с математической точки зрения операциях (например, 0/0 и `1/0’ соответственно).


Создание векторов

Чаще всего векторы создаются с помощью функции c() (c - от combine). Например:

x <- c(1, 3, 5)
print(x)
## [1] 1 3 5

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

  • seq() - создание последовательности значений в указанном интервале, с заданным шагом (seq от sequence). Например:
x <- seq(from = 10, to = 2, by = -2)
print(x)
## [1] 10  8  6  4  2

Первые два аргумента задают первое и последнее значения последовательности, а аргумент by - шаг последовательности (по умолчанию равен единице). Знак - для значения аргумента by маркирует, что последовательность убывающая.

  • выражение : - короткая форма функции seq(), используется для создания последовательности целых чисел, где последующее отличается от предыдущего на 1. Так, выражение 5:1 тождественно выражению seq(5, 1, -1).

  • rep() - повтор какого-либо элемента заданное число раз. В качестве элемента может выступать практически любой объект R (в зависимости от осмысленности в целом подобного выражения). Аргументы times или each задают, какое количество раз повторять весь объект или каждый элемент объекта соответственно:

x <- c('a', 'b', 'c')
rep(x, times = 2)
## [1] "a" "b" "c" "a" "b" "c"
rep(x, each = 2)
## [1] "a" "a" "b" "b" "c" "c"

Если значения аргументов задавать позиционно, то первый аргумент - это итерируемый объект, а второй аргумент - аргумент times:

rep(x, 2)
## [1] "a" "b" "c" "a" "b" "c"
  • sample() - создание последовательности случайно выбранных значений из какого-то заданного вектора значений. Первый аргумент задает выборку, из которой необходимо извлечь подвыборку, второй аргумент (size) определяет объем извлекаемой выборки. Аргумент replace определяет, выборка извлекается с возвращением элементов или нет:
sample(x = 1:5, size = 5, replace = FALSE)
## [1] 2 5 4 3 1
sample(x = 1:5, size = 5, replace = TRUE)
## [1] 3 1 1 5 2