Основы языка R Лекция 3.2 к.ф.-м.н. Павловский Евгений Николаевич
Синтаксис 1. Константы (векторы: числовые, буквенные; символы) 2. Операторы (приоритет операций, присвоение) 3. Выражения 4. Управляющие структуры (условный оператор; цикл) 5. Структуры данных (индексы: вектор чисел, вектор логических значений, имена) 2
Векторы: числовые (numeric) Числа, с плавающей точкой, шестнадцатеричные По умолчанию double a:b – диапазон integer Комплексные числа a+bi Предельная точность 2^1023 Предельный размер 2^ >c( , 2^1023, 0x010) [1] e e e+01 >typeof(1) [1] "double" >typeof(1:1) [1] "integer" >0-1i * -1+1i [1] 0+2i >2^ == 2^1023 [1] TRUE
Векторы: буквенные (character) Кавычки (одиночная ', двойная " ) c – combine – тоже вектор 4 >"слово"; 'тоже слово'; "'однако'" [1] "слово" [1] "тоже слово" [1] "'однако'" >"\"то же\""=='"то же"' [1] TRUE >'\'кавычки\''=="'кавычки'" [1] TRUE >c("Ночь","улица","фонарь","аптека") [1] "Ночь" "улица" "фонарь" "аптека"
Символы Это объекты Начинаются с буквы Могут содержать точки (. ), другие буквы, подчерк ( _ ), числа В обратных кавычках `` могут содержать любые символы Любой символ может быть переопределён, кроме if, else, repeat, while, function, for, in, next, break, TRUE, FALSE, NULL, Inf, NaN, NA, NA_integer_, NA_real_, NA_complex_, NA_character_,...,..1,..2,..3,..4,..5,..6,..7,..8,..9 5 >x_
Операторы Оператор – это унарная или бинарная функция Особая запись: `унарный оператор` x x `бинарный оператор` y Можно определить % свой_оператор % x c(1 + 2, 3 * 4, 5 % 6, 3 ^ 7, 9 %/% 4) [1] >`%++%`1 %++% 2 [1] 6 >`[`(x,1) [1] -1 >sum(1:50) # sum – 1 ый аргумент, 1: ой [1] 1275
Приоритет операций Вызов функции, группировка выражений Индексы и обращения Арифметические Сравнение Формулы Присвоение Помощь 7 >?base::Syntax :: ::: access variables in a namespace component / slot extraction [ [[ indexing ^ exponentiation (right to left) - + unary minus and plus : sequence operator %any% special operators * / multiply, divide + - (binary) add, subtract = == != ordering and comparison ! negation & && and | || or ~ as in formulae -> ->> rightwards assignment = assignment (right to left)
Присвоение Присваивается символу объект Присвоить можно операторами, = Присвоение с модификацией объекта: f(x,…)ss[2]length(s)f`f
Группировка выражений Перевод строки ; - разделитель выражений Скобки: Круглые ( expr ) Фигурные { e_first ; … ; e_last } Как функция `{` Возвращает только elast Вне функций не создаёт новый контекст 9 >x y z x
Специальные операторы: условный Условный оператор Не векторный (проверяется только первое условие вектора) ifelse - векторный 10 >if (1:50>2) "Да" else "Нет" [1] "Да" Предупреждение In if (1:50 > 2) "Да" else "Нет" : длина условия > 1, будет использован только первый элемент >ifelse(c(T,T,F),c(1:3),c(4:6)) [1] 1 2 6
Специальные операторы: выбор switch оператор не векторный первый аргумент буквенный безымянный – по умолчанию после = следует выражение 11 >switch("Раз","Раз"=1,"Два"={1+1},Inf) [1] 1 >switch("Два","Раз"=1,"Два"={1+1},Inf) [1] 2 >switch("Нуль","Раз"=1,"Два"={1+1},Inf) [1] Inf
Специальные операторы: циклы repeat expression while ( condition ) expression for ( var in list ) expression выход – break следующая итерация - next 12 >p for(i in 1:3) print( c(i,p[i])) > i [1] "1" "И" [1] "2" "Р" [1] "3" "Д" [1] 3 > repeat { print( c(i,p[i])) if(i==3) break else i i [1] "1" "И" [1] "2" "Р" [1] "3" "Д" [1] 3
Доступ к структурам данных 13 Запись ОбъектыОписание x[i] Векторы, списки Возвращает объект из x, описанный i. i может быть числовым вектором, буквенным вектором (в т.ч. имён объектов) или логическим вектором. Не допускает частичного совпадения. В списках возвращает список. В векторах --- вектор. x[[i]] Векторы, списки Возвращает единственный элемент x, соответствующий i. i может быть как числовым, так и буквенным вектором длины 1. Допускает частичное соответствие (с опцией exact=FALSE ). x$name Списки Возвращает объект с именем name из объекта x. S4Возвращает объект, сохранённый в объекте x в слоте с именем name.
Ссылки и литература J. Adler, R in a Nutshell, Second ed., 2012, 722 p. Тренажер для освоения основ языка R: от OReillyhttp://tryr.codeschool.com/ 14