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