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
- R Foundation https://www.r-project.org/foundation/
- The Comprehensive R Archive Network: https://cran.r-project.org/
- RStudio & Hadley Wickham
- community
Синтаксис
структура выражения
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)
комментарии и кавычки
#: строка, которая идет после этого знака, считается комментарием и не выполняется. Используется для того, чтобы прокомментировать код или скрыть от выполнения часть кода.'',"": использутся для создания строковых объектов, можно сочетать одной строке, они не взаимозаменяемы``:обратные апострофы, используются в редких случаях, обычно в RMarkdown, инфиксных операторах или кириллических названиях объектов.
Окружение и подсказки
Полезные функции для работы с окружением
При работе с R:
install.packages('pkg')- установить пакетpkgили список пакетов. Делается однократно при настройке Rlibrary('pkg')- подключение установленного пакета - делается при каждом новом запуске сессии, если этот пакет планируется использоватьgetwd()- узнать адрес рабочей папкиsetwd()- никогда не использовать! Это мешает при работе с несколькими коллегами, может вызвать сбои при каких-то изменениях в структуре папок ну и в целом дурной тон. Лучше использовать проекты в RStudio, которые формируют отдельную папку под каждый проект.ls()- возвращает список созданных объектов рабочего окруженияrm()- удалить какой-нибудь объектrm(list = ls())- удалить все объекты рабочего окружения
help
help(), ? or ??
cheatsheets: https://www.rstudio.com/resources/cheatsheets/
google it!
stackoverflow
Векторы
Простой набор объектов одного атомарного типа.
атомарные типы данных
-
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). Например:
## [1] 1 3 5
Простую неименованную последовательность атомарного типа можно задать также другими командами, наиболее часто используемые из них:
-
seq()- создание последовательности значений в указанном интервале, с заданным шагом (seqотsequence). Например:
## [1] 10 8 6 4 2
Первые два аргумента задают первое и последнее значения последовательности, а аргумент by - шаг последовательности (по умолчанию равен единице). Знак - для значения аргумента by маркирует, что последовательность убывающая.
выражение
:- короткая форма функцииseq(), используется для создания последовательности целых чисел, где последующее отличается от предыдущего на1. Так, выражение5:1тождественно выражениюseq(5, 1, -1).rep()- повтор какого-либо элемента заданное число раз. В качестве элемента может выступать практически любой объект R (в зависимости от осмысленности в целом подобного выражения). Аргументыtimesилиeachзадают, какое количество раз повторять весь объект или каждый элемент объекта соответственно:
## [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