Содержание
Язык R
Общее описание языка R
Простой и полезный язык для статистики, машинного обучения и DataMining.История создания
Конвенции именования
Программа «Hello, world!»
#это однострочный комментарий HWstr <- "Hello, world!" #ввод переменной print(HWstr) #вывод переменной print(hwstr) #это строчка выдаст ошибку, т.к. R чувствителен к регистру
#в R нет многострочных комментариев "Hello, world!" -> HWStr #стрелочка работает в обе стороны HWstr #так удобнее всего, наверное, удобнее всего выводить на печать
(HWstr <- "Hello, world!") #иногда так удобно: сразу присвоил значение и вывел на печать
R как калькулятор
Все имеющиеся т.н. «статистические» пакеты можно условно разделить на три категории:- библиотеки высокоуровневых ЯП (Seismic UNIX в Си, Pandas в Python)
- «взбесившиеся» научные калькуляторы: помимо R к ним относятся GNU Octave, Gretl (GNU Regression, Econometrics and Times-series Library), GAUSS.
- «взбесившиеся» табличные процессоры: работа с ними напоминает MS Excel, у которого оставили только VBA-редактор (например, SAS Base — фактический стандарт в банковской и страховой индустриях, STATA или Statistica) или существенно урезали возможности редактирования редактирования ячеек и «кнопочные» функции и меню (SPSS и SAS Enterprise Guide).
R можно использовать как хороший научный и статистический калькулятор.
2 + 2 #наверное, выведет 4
12 + 5 * (3 - 7) + 24/48 # должно быть, выведет -7.5
a <- 2 #переменной с именем "a" присвоим значение 2 b <- 3 #переменной с именем "b" присвоим значение 3 a + b #выведем сумму переменных с именами "a" и "b" (скорее всего напечатает 5)
d <- 3 #переменной "d" присвоим значение 3 d <- d + 5 #переменной "d" присвоим предыдущее её значение, прибавив 5 d #скорее всего, вернет 8
#совсем просто: значение функции Гомпертца, для a <- 0.993 #верхняя ассимптота b <- -2.63 #смещение по t d <- -1.257 #масштабированием по t t <- 6.2567 #момент времени Gompertz.Value <- a * exp(b * exp(d * t)) Gompertz.Value #очевидно, что значение будет равно 0.9919975
Векторы
Векторы в R — один из двух наиболее часто используемых объектов. Вектор в R понимается не как элемент векторного пространства (то есть не в строго математическом смысле), а как набор однородных данных. Можно сказать, что вектор в R — массив однородных данных или контейнер однородных данных. Числовые вектора в R — частный случай.#вектор, не содержащий элементов empty.vector <- c() #используется оператор c() empty.vector
#вектор можно задать простым перечислением элементов first.vector <- c(1, 5, 12, 6.78, 5.4645) first.vector #выведет весь вектор #нумерация элементов вектор начинается с 1, а не с 0, как, например, в Си first.vector[1] #покажет первый элемент вектора first.vector[4] #покажет четвертый элемент вектора, т.е. 6.78 first.vector[2:4] #покажет элементы со второго по четвертый
#можно задать вектор, состоящий из строк second.vector <- c("one", "two", "three") second.vector[2]
#если в векторе встречаются и строки, и числа, то все элементы вектора, будут строками second.vector <- c(1, "two", 3) is.numeric(second.vector[1]) #функция is.numeric() возвращает ИСТИНА, если ее аргумент - число, иначе ЛОЖЬ
Функции, ветвления и циклы
Синтаксис любой функции в R выглядит следующим образом:function_name <- function(<argument_1>, <argument_2>, ...){ #code <return(value_to_return)> }
Можно использовать упрощенный синтаксис (что делать крайне не советую — АтрашкевичАндрей)
function_name <- function(<argument_1>, <argument_2>, ...) #code here
В этом случае можно писать код только в строчку после закрывающей скобки.
#квадрат числа Func.One <- function(x) x^2 Func.One(2.75) #вернет 7.5625
#экспонента числа минус его куб Func.Two <- function(x){ result <- exp(x) result <- result - x**3 #степень можно записать и как "^", и как "**" return(result) } Func.Two(6.5) #вернет 390.5166
Вычисление факториала
Синтаксис цикла for:for(iterator_name in start_value:stop_value){ #code }Если необходимо задать шаг итерации, то запись несколько отличается:
for(itarator_name in seq(start_value, stop_value, by = by_value)){ #code }
#инкрементное решение Func.Factorail.Iter <- function(n){ #знак ";" обязательно нужен только в таких случаях записи более одной команды в строчку stopifnot(n > 0); factorial <- 1 #если условие в скобках не ИСТИНА, значит прекращается исполнение for(i in 1:n){ factorial <- factorial * i } return(factorial) } Func.Factorail.Iter(5) #должен вернуть 120
Для проверки условий ветвлений используются логические выражения (принимающие значения: ИСТИНА и ЛОЖЬ). Для записи логических выражений используются логические операторы И, ИЛИ, НЕ. В синтаксисе R: &, |, ! — соответственно.
Синтаксис ветвления:
if(condition_1){ #code если условие condition_1 - ИСТИНА } else if(condition_2){ #code если условие condition_2 - ИСТИНА } ... else if(condition_N){ #code если условие condition_N - ИСТИНА } else{ #code если condition_1 ... condition_N все ЛОЖЬ }
#рекурсивное решение Func.Factorial.Recur <- function(n){ stopifnot(n >= 0) if(n == 0){ return(1) } else{ return(n * Func.Factorial.Recur(n - 1)) #вызов функции из самой себя } } Func.Factorial.Recur(4) #должен вернуть 24
Числа Фибоначчи
#Fibonacci-series = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...} Func.Fibonacci <- function(n){ stopifnot(n > 0) if(n == 1){ return(0) } else if(n == 2){ #обратите внимание на пробел между else и if return(1) } else{ return(Func.Fibonacci(n - 1) + Func.Fibonacci(n - 2)) } } Func.Fibonacci(8) #вернет 13
Использование языка
Литература
- 1 R Language Definition. Version 3.1.2 (2014-10-31) DRAFT / R Core Team - 2014 - 60 p.
- http://cran.r-project.org/doc/manuals/R-lang.pdf
- Venables W. N., Smith and the R Core Team D. M. An Introduction to R. Notes on R: A Programming Environment for Data Analysis and Graphics. Version 3.1.2 (2014-10-31) / W. N. Venables, D. M. Smith and the R Core Team - 2014 - 105 p. : http://cran.r-project.org/doc/manuals/R-intro.pdf
- Paradis E. R for beginners / Paradis E. - 2005 - 72 p. : http://cran.r-project.org/doc/contrib/Paradis-rdebuts_en.pdf