R Конспект

Введение

  • Как получить справку в Rstudio?
help()
?rm #(только для некоторых стандартных функций)

Сменить язык на английский на время сессии

Sys.setenv(LANG = "en")

Создать переменную и записать в нее значение:

cats <- 2
dogs <- 3

Как написать функцию с вводом 2 переменных?

divide <- function(x, y) {
return(x/y)
}

Как написать функцию с вводом 1 переменной?

returntwo <- function(x) {
X <- 2
x
}
returntwo(4)
[1] 4

Ничего не вышло! Почему не перезаписалась пременная x?
Так ничего не получится, потому что присваиваю значение в локальном окружении функции - на глобальное окружение переменных это никак не повлияет и при применении функции ничего нового не выведется. Если хочешь повлиять на глобальное окружение из локального применяй << (но это плохая практика - нагружается код, считается плохой практикой, можно запутаться во всевозможных влияниях внутреннего окружения функций на глобальное окружение R)

returntwo <- function(x) {
return(x <- 2)
}

ПЕРЕМЕННЫЕ

Глобальное окружение

  • Созданные из консоли переменные обитают здесь
    *Окружение - это пространство, где сидит переменная
  • Переменные, созданные в консоли, сидят в глобальном окружении
  • Вывести все переменные и функции в глобальном окружении ls()

Функция нормального распределения:

rnorm #где n - число генерируемых чисел
function (n, mean = 0, sd = 1) 
.Call(C_rnorm, n, mean, sd)
<bytecode: 0x0000027e30125690>
<environment: namespace:stats>
rnorm(30, mean = 25, sd = 5) #где mean - среднее, sd - стандартное отклонение
 [1] 26.78104 29.37611 24.49029 21.48213 19.55770 32.49970 20.63234 23.92941
 [9] 30.16567 17.86763 30.24234 17.42370 30.59605 29.14559 21.18170 28.83171
[17] 29.76755 24.59607 22.92615 22.74490 19.51892 28.10343 30.71289 17.54392
[25] 23.91796 33.93699 26.21738 32.18606 17.34835 28.25054

Но не всегда придется обращаться к стандартным функциям, надо уметь писать свои

УДАЛИТЬ ВСЕ ПЕРЕМЕННЫЕ из глобального окружения*

 rm(list = ls())

Общий глоссарий для этого урока:

# При необходимости всегда можно получить справку по нужной функции
# Запомнить все аргументы каждой функции нереально - научиться пользоваться справкой жизненно необходимо в R
help()
?help
?help.search
?"<-"
?ls
?"function" # нек
?rm
?rnorm
# Если не помнишь название функции, то можно сделать поиск по ближайшим совпадениям через ??. Например:
??top

РЕЖИМЫ РАБОТЫ R

В Rstudio есть два режима:
* Batch - режим - чистый R
В Batch режиме все переменные, которые мы хотим вывести в печать надо заключать в функцию print
* Интерактивный режим в консоли Rstudio Консоль это делает автоматически

ВАЖНАЯ ОСОБЕННОСТЬ ХРАНЕНИЯ ЧИСЕЛ ТИПА DOUBLE (float)

Для демонстрации будем проверять логические утверждения равенства значений (“==” - это знак равенства) Пример 1:

0.1 + 0.1 == 0.2
[1] TRUE

Что совпадает с нашим ожиданием

Пример 2

0.1 + 0.15 == 0.25
[1] TRUE

Что совпадает с нашим ожиданием

Пример 3

0.1 + 0.05 == 0.15
[1] FALSE

Получаем что-то странное

Эта особенность очень хорошо задокументирована в оф документации R и в Stackoverflow https://stackoverflow.com/questions/9508518/why-are-these-numbers-not-equal Есть стандартная автоматическая функция, которая позволяет преодолеть эту проблему - all.equal - она сравнивает “приблизительные” значения

В свое время была опубликована одна из веховых статей David Goldberg “What every computer scientist should know about floating-point arythmetic”
https://www.itu.dk/~sestoft/bachelor/IEEE754_article.pdf

LS0tDQp0aXRsZTogItCa0L7QvdGB0L/QtdC60YIg0L/QviBSLiDQmtGD0YDRgSBTdGVwaWsgIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyBSINCa0L7QvdGB0L/QtdC60YIgIA0KKiBSIC0g0LjQvdGC0LXRgNC/0YDQtdGC0LjRgNGD0LXQvNGL0Lkg0Y/Qt9GL0LogIA0KKiDQmtCw0LbQtNGD0Y4g0YHRgtGA0L7QutGDINC40L3RgtC10YDQv9GA0LXRgtC40YDRg9C10YIg0L/QvtGB0YLRgNC+0YfQvdC+DQoNCg0KIyMjINCa0L7RgNC+0YLQutC40Lkg0YHQv9GA0LDQstC+0YfQvdC40Log0L/QviDRhNGD0L3QutGG0LjRj9C8ICANCmh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL2RvYy9jb250cmliL1Nob3J0LXJlZmNhcmQucGRmDQpodHRwczovL2Fha2luc2hpbi5uZXQvcnUvcG9zdHMvci1mdW5jdGlvbnMvDQoNCmh0dHBzOi8vd3d3LnItYmxvZ2dlcnMuY29tL2FuLWFic29sdXRlLWJlZ2lubmVycy1ndWlkZS10by1jcmVhdGluZy1kYXRhLWZyYW1lcy1mb3ItYS1zdGFjay1vdmVyZmxvdy1yLXF1ZXN0aW9uLw0KDQpCT09LICANCmh0dHBzOi8vd3d3LnItYmxvZ2dlcnMuY29tL2luLWRlcHRoLWludHJvZHVjdGlvbi10by1tYWNoaW5lLWxlYXJuaW5nLWluLTE1LWhvdXJzLW9mLWV4cGVydC12aWRlb3MvDQoNCg0KIyMg0JLQstC10LTQtdC90LjQtSAgDQoqINCa0LDQuiDQv9C+0LvRg9GH0LjRgtGMINGB0L/RgNCw0LLQutGDINCyIFJzdHVkaW8/ICANCg0KYGBge3J9DQpoZWxwKCkNCj9ybSAjKNGC0L7Qu9GM0LrQviDQtNC70Y8g0L3QtdC60L7RgtC+0YDRi9GFINGB0YLQsNC90LTQsNGA0YLQvdGL0YUg0YTRg9C90LrRhtC40LkpDQpgYGANCg0KDQojIyMg0KHQvNC10L3QuNGC0Ywg0Y/Qt9GL0Log0L3QsCDQsNC90LPQu9C40LnRgdC60LjQuSDQvdCwINCy0YDQtdC80Y8g0YHQtdGB0YHQuNC4DQpgYGB7cn0NClN5cy5zZXRlbnYoTEFORyA9ICJlbiIpDQpgYGANCg0KIyMjINCh0L7Qt9C00LDRgtGMINC/0LXRgNC10LzQtdC90L3Rg9GOINC4INC30LDQv9C40YHQsNGC0Ywg0LIg0L3QtdC1INC30L3QsNGH0LXQvdC40LU6DQpgYGB7cn0NCmNhdHMgPC0gMg0KZG9ncyA8LSAzDQpgYGANCg0KIyMjINCa0LDQuiDQvdCw0L/QuNGB0LDRgtGMINGE0YPQvdC60YbQuNGOINGBINCy0LLQvtC00L7QvCAyINC/0LXRgNC10LzQtdC90L3Ri9GFPw0KYGBge3J9DQpkaXZpZGUgPC0gZnVuY3Rpb24oeCwgeSkgew0KcmV0dXJuKHgveSkNCn0NCmBgYA0KDQojIyMg0JrQsNC6INC90LDQv9C40YHQsNGC0Ywg0YTRg9C90LrRhtC40Y4g0YEg0LLQstC+0LTQvtC8IDEg0L/QtdGA0LXQvNC10L3QvdC+0Lk/DQpgYGB7cn0NCnJldHVybnR3byA8LSBmdW5jdGlvbih4KSB7DQpYIDwtIDINCngNCn0NCnJldHVybnR3byg0KQ0KYGBgDQoqKtCd0LjRh9C10LPQviDQvdC1INCy0YvRiNC70L4hKiog0J/QvtGH0LXQvNGDINC90LUg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQu9Cw0YHRjCDQv9GA0LXQvNC10L3QvdCw0Y8gKngqPyAgDQrQotCw0Log0L3QuNGH0LXQs9C+INC90LUg0L/QvtC70YPRh9C40YLRgdGPLCDQv9C+0YLQvtC80YMg0YfRgtC+INC/0YDQuNGB0LLQsNC40LLQsNGOINC30L3QsNGH0LXQvdC40LUg0LIg0LvQvtC60LDQu9GM0L3QvtC8INC+0LrRgNGD0LbQtdC90LjQuCDRhNGD0L3QutGG0LjQuCAtINC90LAg0LPQu9C+0LHQsNC70YzQvdC+0LUg0L7QutGA0YPQttC10L3QuNC1INC/0LXRgNC10LzQtdC90L3Ri9GFINGN0YLQviDQvdC40LrQsNC6INC90LUg0L/QvtCy0LvQuNGP0LXRgiDQuCDQv9GA0Lgg0L/RgNC40LzQtdC90LXQvdC40Lgg0YTRg9C90LrRhtC40Lgg0L3QuNGH0LXQs9C+INC90L7QstC+0LPQviDQvdC1INCy0YvQstC10LTQtdGC0YHRjy4g0JXRgdC70Lgg0YXQvtGH0LXRiNGMINC/0L7QstC70LjRj9GC0Ywg0L3QsCDQs9C70L7QsdCw0LvRjNC90L7QtSDQvtC60YDRg9C20LXQvdC40LUg0LjQtyDQu9C+0LrQsNC70YzQvdC+0LPQviDQv9GA0LjQvNC10L3Rj9C5ICo8PCogKNC90L4g0Y3RgtC+INC/0LvQvtGF0LDRjyDQv9GA0LDQutGC0LjQutCwIC0g0L3QsNCz0YDRg9C20LDQtdGC0YHRjyDQutC+0LQsINGB0YfQuNGC0LDQtdGC0YHRjyDQv9C70L7RhdC+0Lkg0L/RgNCw0LrRgtC40LrQvtC5LCDQvNC+0LbQvdC+INC30LDQv9GD0YLQsNGC0YzRgdGPINCy0L4g0LLRgdC10LLQvtC30LzQvtC20L3Ri9GFINCy0LvQuNGP0L3QuNGP0YUg0LLQvdGD0YLRgNC10L3QvdC10LPQviDQvtC60YDRg9C20LXQvdC40Y8g0YTRg9C90LrRhtC40Lkg0L3QsCDQs9C70L7QsdCw0LvRjNC90L7QtSDQvtC60YDRg9C20LXQvdC40LUgUikNCmBgYHtyfQ0KcmV0dXJudHdvIDwtIGZ1bmN0aW9uKHgpIHsNCnJldHVybih4IDwtIDIpDQp9DQpgYGANCg0KDQojINCf0JXQoNCV0JzQldCd0J3Qq9CVDQojIyDQk9C70L7QsdCw0LvRjNC90L7QtSDQvtC60YDRg9C20LXQvdC40LUNCiog0KHQvtC30LTQsNC90L3Ri9C1INC40Lcg0LrQvtC90YHQvtC70Lgg0L/QtdGA0LXQvNC10L3QvdGL0LUg0L7QsdC40YLQsNGO0YIg0LfQtNC10YHRjCAgDQoq0J7QutGA0YPQttC10L3QuNC1IC0g0Y3RgtC+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQviwg0LPQtNC1INGB0LjQtNC40YIg0L/QtdGA0LXQvNC10L3QvdCw0Y8gIA0KKiDQn9C10YDQtdC80LXQvdC90YvQtSwg0YHQvtC30LTQsNC90L3Ri9C1INCyINC60L7QvdGB0L7Qu9C4LCDRgdC40LTRj9GCINCyINCz0LvQvtCx0LDQu9GM0L3QvtC8INC+0LrRgNGD0LbQtdC90LjQuCAgDQoqINCS0YvQstC10YHRgtC4INCy0YHQtSDQv9C10YDQtdC80LXQvdC90YvQtSDQuCDRhNGD0L3QutGG0LjQuCDQsiDQs9C70L7QsdCw0LvRjNC90L7QvCDQvtC60YDRg9C20LXQvdC40LggbHMoKQ0KDQoqKtCk0YPQvdC60YbQuNGPINC90L7RgNC80LDQu9GM0L3QvtCz0L4g0YDQsNGB0L/RgNC10LTQtdC70LXQvdC40Y86KioNCmBgYHtyfQ0Kcm5vcm0gI9Cz0LTQtSBuIC0g0YfQuNGB0LvQviDQs9C10L3QtdGA0LjRgNGD0LXQvNGL0YUg0YfQuNGB0LXQuw0KIyDQstCy0L7QtNGPINGE0YPQvdC60YbQuNGOINCx0LXQtyDRgdC60L7QsdC+0LosINC80Ysg0L/QvtC70YPRh9Cw0LXQvCDRgdC/0YDQsNCy0LrRgyDQv9C+INGE0YPQvdC60YbQuNC4INC4INC10LUg0LDRgNCz0YPQvNC10L3RgtCw0LwNCmBgYA0KYGBge3J9DQpybm9ybSgzMCwgbWVhbiA9IDI1LCBzZCA9IDUpICPQs9C00LUgbWVhbiAtINGB0YDQtdC00L3QtdC1LCBzZCAtINGB0YLQsNC90LTQsNGA0YLQvdC+0LUg0L7RgtC60LvQvtC90LXQvdC40LUNCmBgYA0KDQrQndC+INC90LUg0LLRgdC10LPQtNCwINC/0YDQuNC00LXRgtGB0Y8g0L7QsdGA0LDRidCw0YLRjNGB0Y8g0Log0YHRgtCw0L3QtNCw0YDRgtC90YvQvCDRhNGD0L3QutGG0LjRj9C8LCDQvdCw0LTQviDRg9C80LXRgtGMINC/0LjRgdCw0YLRjCDRgdCy0L7QuA0KIA0KDQoqKtCj0JTQkNCb0JjQotCsINCS0KHQlSDQn9CV0KDQldCc0JXQndCd0KvQlSDQuNC3INCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0L7QutGA0YPQttC10L3QuNGPKioqDQpgYGB7cn0NCiBybShsaXN0ID0gbHMoKSkNCmBgYA0KDQojIyDQntCx0YnQuNC5INCz0LvQvtGB0YHQsNGA0LjQuSDQtNC70Y8g0Y3RgtC+0LPQviDRg9GA0L7QutCwOg0KYGBge3J9DQojINCf0YDQuCDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDQstGB0LXQs9C00LAg0LzQvtC20L3QviDQv9C+0LvRg9GH0LjRgtGMINGB0L/RgNCw0LLQutGDINC/0L4g0L3Rg9C20L3QvtC5INGE0YPQvdC60YbQuNC4DQojINCX0LDQv9C+0LzQvdC40YLRjCDQstGB0LUg0LDRgNCz0YPQvNC10L3RgtGLINC60LDQttC00L7QuSDRhNGD0L3QutGG0LjQuCDQvdC10YDQtdCw0LvRjNC90L4gLSDQvdCw0YPRh9C40YLRjNGB0Y8g0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINGB0L/RgNCw0LLQutC+0Lkg0LbQuNC30L3QtdC90L3QviDQvdC10L7QsdGF0L7QtNC40LzQviDQsiBSDQpoZWxwKCkNCj9oZWxwDQo/aGVscC5zZWFyY2gNCj8iPC0iDQo/bHMNCj8iZnVuY3Rpb24iIA0KP3JtDQo/cm5vcm0NCiMg0JXRgdC70Lgg0L3QtSDQv9C+0LzQvdC40YjRjCDQvdCw0LfQstCw0L3QuNC1INGE0YPQvdC60YbQuNC4LCDRgtC+INC80L7QttC90L4g0YHQtNC10LvQsNGC0Ywg0L/QvtC40YHQuiDQv9C+INCx0LvQuNC20LDQudGI0LjQvCDRgdC+0LLQv9Cw0LTQtdC90LjRj9C8INGH0LXRgNC10LcgPz8uINCd0LDQv9GA0LjQvNC10YA6DQo/P3RvcA0KYGBgDQoNCg0KIyMg0KDQldCW0JjQnNCrINCg0JDQkdCe0KLQqyBSDQrQkiBSc3R1ZGlvINC10YHRgtGMINC00LLQsCDRgNC10LbQuNC80LA6ICANCiogKipCYXRjaCoqIC0g0YDQtdC20LjQvCAtINGH0LjRgdGC0YvQuSBSICANCirQkiBCYXRjaCDRgNC10LbQuNC80LUg0LLRgdC1INC/0LXRgNC10LzQtdC90L3Ri9C1LCDQutC+0YLQvtGA0YvQtSDQvNGLINGF0L7RgtC40Lwg0LLRi9Cy0LXRgdGC0Lgg0LIg0L/QtdGH0LDRgtGMINC90LDQtNC+INC30LDQutC70Y7Rh9Cw0YLRjCDQsiDRhNGD0L3QutGG0LjRjiBwcmludCogIA0KKiAqKtCY0L3RgtC10YDQsNC60YLQuNCy0L3Ri9C5INGA0LXQttC40LwqKiDQsiDQutC+0L3RgdC+0LvQuCBSc3R1ZGlvDQoq0JrQvtC90YHQvtC70Ywg0Y3RgtC+INC00LXQu9Cw0LXRgiDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCoNCg0KIyMg0JLQkNCW0J3QkNCvINCe0KHQntCR0JXQndCd0J7QodCi0Kwg0KXQoNCQ0J3QldCd0JjQryDQp9CY0KHQldCbINCi0JjQn9CQIERPVUJMRSAoZmxvYXQpDQrQlNC70Y8g0LTQtdC80L7QvdGB0YLRgNCw0YbQuNC4INCx0YPQtNC10Lwg0L/RgNC+0LLQtdGA0Y/RgtGMINC70L7Qs9C40YfQtdGB0LrQuNC1INGD0YLQstC10YDQttC00LXQvdC40Y8g0YDQsNCy0LXQvdGB0YLQstCwINC30L3QsNGH0LXQvdC40LkgKCoiPT0iKiAtINGN0YLQviDQt9C90LDQuiDRgNCw0LLQtdC90YHRgtCy0LApDQoqKtCf0YDQuNC80LXRgCAxOioqDQpgYGB7cn0NCjAuMSArIDAuMSA9PSAwLjINCmBgYA0K0KfRgtC+INGB0L7QstC/0LDQtNCw0LXRgiDRgSDQvdCw0YjQuNC8INC+0LbQuNC00LDQvdC40LXQvCAgDQogIA0KICANCioq0J/RgNC40LzQtdGAIDIqKg0KYGBge3J9DQowLjEgKyAwLjE1ID09IDAuMjUNCmBgYA0K0KfRgtC+INGB0L7QstC/0LDQtNCw0LXRgiDRgSDQvdCw0YjQuNC8INC+0LbQuNC00LDQvdC40LXQvCAgDQogIA0KICANCioq0J/RgNC40LzQtdGAIDMqKg0KYGBge3J9DQowLjEgKyAwLjA1ID09IDAuMTUNCmBgYA0K0J/QvtC70YPRh9Cw0LXQvCDRh9GC0L4t0YLQviDRgdGC0YDQsNC90L3QvtC1ICANCg0K0K3RgtCwINC+0YHQvtCx0LXQvdC90L7RgdGC0Ywg0L7Rh9C10L3RjCDRhdC+0YDQvtGI0L4g0LfQsNC00L7QutGD0LzQtdC90YLQuNGA0L7QstCw0L3QsCDQsiDQvtGEINC00L7QutGD0LzQtdC90YLQsNGG0LjQuCBSINC4INCyIFN0YWNrb3ZlcmZsb3cNCmh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzk1MDg1MTgvd2h5LWFyZS10aGVzZS1udW1iZXJzLW5vdC1lcXVhbA0K0JXRgdGC0Ywg0YHRgtCw0L3QtNCw0YDRgtC90LDRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQsNGPINGE0YPQvdC60YbQuNGPLCDQutC+0YLQvtGA0LDRjyDQv9C+0LfQstC+0LvRj9C10YIg0L/RgNC10L7QtNC+0LvQtdGC0Ywg0Y3RgtGDINC/0YDQvtCx0LvQtdC80YMgLSBhbGwuZXF1YWwgLSDQvtC90LAg0YHRgNCw0LLQvdC40LLQsNC10YIg4oCc0L/RgNC40LHQu9C40LfQuNGC0LXQu9GM0L3Ri9C14oCdINC30L3QsNGH0LXQvdC40Y8gICAgDQoNCtCSINGB0LLQvtC1INCy0YDQtdC80Y8g0LHRi9C70LAg0L7Qv9GD0LHQu9C40LrQvtCy0LDQvdCwINC+0LTQvdCwINC40Lcg0LLQtdGF0L7QstGL0YUg0YHRgtCw0YLQtdC5IERhdmlkIEdvbGRiZXJnICJXaGF0IGV2ZXJ5IGNvbXB1dGVyIHNjaWVudGlzdCBzaG91bGQga25vdyBhYm91dCBmbG9hdGluZy1wb2ludCBhcnl0aG1ldGljIiAgDQpodHRwczovL3d3dy5pdHUuZGsvfnNlc3RvZnQvYmFjaGVsb3IvSUVFRTc1NF9hcnRpY2xlLnBkZg0KDQoNCg0KDQo=