Содержание
Язык R
Общее описание языка R
R — простой и полезный язык для статистики, машинного обучения и DataMining, распространяемый по лицензии GNU GPL 2.
Главная страница проекта: http://www.r-project.org/
- Товарищи, есть просьба: напишите, как поставить R под *NIX-системы. -- АтрашкевичАндрей
- Итак, для дистрибутивов Ubuntu и Debian устанока R очень простая.
- Для работы нужно установить следующие пакеты: r-base r-base-dev r-base-core
- $ sudo apt-get update && apt-get install r-base r-base-dev r-base-core
- Более подробно об установке R можно прочитать тут http://cran.r-project.org/doc/manuals/r-release/R-admin.html -- ПетрунёвАлексей
История создания
В 1976 году сотрудники AT&T Bell Labs: Джон Чамберс, Рик Беккер и Алан Вилкс — создали язык программирования S (от англ. «statistics»).
В 1993 году в стране, где на десять жителей приходится двадцать овец, три хоббита и два эльфа, двумя сотрудниками Оклендского университета Россом Ихака и Робертом Джентльменом (это не шутка-) на основе языка S был разработан язык R. Язык, как и его предшественник, был разработан преимущественно для статистических целей, а его название было подражанием названию S, кроме того, это была первая буква имен разработчиков (несмотря на то, что полное имя Росса Ихака — Джордж Росс Ихака). Разработчик языка S Джон Чамберс входит в R Core Team.
Соглашения оформления кода
За основу соглашений оформления кода был принят «Google's R Style Guide»: https://google-styleguide.googlecode.com/svn/trunk/Rguide.xml
Примеры кода ниже соответствуют этим соглашениям.
- К: использовал «венгерскую нотацию» по чисто педагогическим причинам (и далеко не везде). Незнакомым с программированием (экономистам, биологам и пр.) гораздо проще понимать на начальном уровне (сужу по себе, кстати) -- АтрашкевичАндрей.
Программа «Hello, world!»
Для присвоения переменной значения в R используется оператор <-. Оператор = также поддерживается, но не соответствует соглашениям. Поэтому во всех дальнейших примерах использовует только оператор <-.
# это однострочный комментарий str.hw <- "Hello, world!" # ввод переменной print(str.hw) # вывод переменной [1] "Hello, world!"
R чувствителен к регистру, поэтому будьте внимательны и соблюдайте соглашения оформления кода.
str.hw <- "Hello, world!" # ввод переменной print(str.HW) Ошибка в print(str.HW) : объект 'str.HW' не найден
Оператор присвоения работает в обе стороны, поэтому можно писать как <-, так и ->
# в R нет многострочных комментариев "Hello, world!" -> str.hw str.hw # так удобнее всего, наверное, удобнее всего выводить на печать [1] "Hello, world!"
Иногда удобно вывести на печать переменную сразу после присвоения значения. Для этого используется заключение ее в круглые скобки.
(str.hw <- "Hello, world!") [1] "Hello, world!"
R как калькулятор
Все имеющиеся т.н. «статистические» пакеты можно условно разделить на три категории:
- библиотеки высокоуровневых ЯП (Seismic UNIX в Си, Pandas в Python) и специализированные языки для математических (включая статистические) вычисления: GNU Octave, Julia, MATLAB, MATCAD
- «взбесившиеся» научные калькуляторы: помимо R к ним относятся Gretl (GNU Regression, Econometrics and Times-series Library), GAUSS.
- «взбесившиеся» табличные процессоры: работа с ними напоминает MS Excel, у которого оставили только VBA-редактор (например, SAS Base — фактический стандарт в банковской и страховой индустриях, STATA или Statistica) или существенно урезали возможности редактирования редактирования ячеек и «кнопочные» функции и меню (SPSS и SAS Enterprise Guide).
R можно использовать как хороший научный и статистический калькулятор.
2 + 2 [1] 4
12 + 5 * (3 - 7) + 24/4.8 [1] -3
a <- 2 b <- 3 (c <- a + b) [1] 5 (c <- c + 6) [1] 11
# вычисление значения функции Гомпертца, для a <- 0.993 # верхняя ассимптота b <- -2.63 # смещение по t d <- -1.257 # масштабированием по t t <- 6.2567 # момент времени gompertz.value <- a * exp(b * exp(d * t)) # функция cat() объединяет свои аргументы в одну строку # "\n" означает перевод каретки на новую строку cat("Gompertz Value = ", gompertz.value, '"\n") Gompertz Value = 0.9919975
Векторы
Векторы в R — один из наиболее часто используемых объектов. Вектор в R понимается не как элемент векторного пространства (то есть не в строгом математическом смысле), а как набор однородных данных. Можно сказать, что вектор в R — массив (или контейнер) однородных данных. Числовые вектора в R — частный случай. Кроме того, следует особенно отметить, что числа в R — это вектора единичной длины. Именно в этом смысле говорят, что в R нет числовых скаляров (хотя просто скаляры есть, например булевы значения: TRUE и FALSE).
Для инициализации переменной-вектора кроме оператора присвоения <- используется также оператор c(). С его помощью можно создать любой вектор, включая пустой вектор, не содержащий ни одного значения. Длина такого вектора будет равняться нулю.
vec.empty <- c() vec.empty NULL length.of.vec.empty <- length(vec.empty) length.of.vec.empty [1] 0
Вектор можно задать простым перечислением его элементов.
vec.first <- c(1, 5, 12, 6.78, 5.4645) vec.first [1] 1.0000 5.0000 12.0000 6.7800 5.4645
Нумерация элементов вектора начинается с 1, а не с 0, как, например, в Си (а также во многих других языках программирования). Чтобы указать определенный элемент или элементы вектора используются квадратные скобки.
vec.first <- c(1, 5, 12, 6.78, 5.4645) vec.first[1] [1] 1 vec.first[4] [1] 6.78 vec.first[2:4] [1] 5.00 12.00 6.78
Векторы имеют фундаментальное значение в R. Например, в циклы в R проходят по элементам вектора. Поэтому есть еще один способ задания векторов:.
vec.one.to.five <- c(1:5) vec.one.to.five [1] 1 2 3 4 5
vec.seven.to.eleven <- c(7:11) vec.seven.to.eleven [1] 7 8 9 10 11
vec.one.to.ten.without.six <- c(vec.one.to.five, vec.seven.to.eleven[1:4]) vec.one.to.ten.without.six [1] 1 2 3 4 5 7 8 9 10
При указании элементов вектора в квадратных скобках можно указывать вектор, задающий индексы.
vec.one.to.ten.without.six[c(1, (5:7))] [1] 1 5 7 8
# можно задать вектор, состоящий из строк vec.second <- c("one", "two", "three") vec.second[2] [1] "two"
# если в векторе встречаются и строки, и числа, то все элементы вектора, будут строками second.vec <- c(1, "two", 3) # функция is.numeric() возвращает ИСТИНА, если ее аргумент - число, иначе ЛОЖЬ is.numeric(second.vec[1])
Функции, ветвления и циклы
Синтаксис любой функции в R выглядит следующим образом:
FunctionName <- function(<argument.1> <, argument.2> <, ...>){ # code <return(value.to.return)> }
Можно использовать упрощенный синтаксис (что делать крайне не советую — АтрашкевичАндрей)
FunctionName <- function(<argument.1><, argument.2><, ...>){ # code here
Показан только синтаксис, соответствующий объявленным выше соглашениям оформления кода.
# квадрат числа FuncOne <- function(x) x^2 FuncOne(2.75)
# экспонента числа минус его куб FuncTwo <- function(x){ result <- exp(x) result <- result - x**3 # степень можно записать и как "^", и как "**" return(result) } FuncTwo(6.5)
Вычисление факториала
Синтаксис цикла for:
for(iterator.name in start.value:stop.value){ # code }
Если необходимо задать шаг итерации, то запись несколько отличается:
for(itarator.name in seq(start.value, stop.value, by = by.value)){ # code }
# инкрементное решение FuncFactorialIteraion <- function(n){ stopifnot (n > 0) # если условие в скобках не ИСТИНА, значит прекращается исполнение factorial <- 1 for (i in 1:n) { factorial <- factorial * i } return(factorial) } FuncFactorialIteraion(5)
Для проверки условий ветвлений используются логические выражения (принимающие одно из возможных значений: ИСТИНА или ЛОЖЬ). Для записи логических выражений используются логические операторы И, ИЛИ, НЕ. В синтаксисе R: &, |, ! — соответственно.
Синтаксис ветвления:
#condition.1, ..., condition.N - логические выражения 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 все ЛОЖЬ }
# рекурсивное решение FuncFactiorialRecur <- function(n) { stopifnot (n >= 0) if (n == 0) { return(1) } else { return(n * FuncFactiorialRecur(n - 1)) #вызов функции из самой себя } } FuncFactiorialRecur(4)
Числа Фибоначчи
# последовательность Фибоначчи F = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...} FuncFibonacci <- function(n) { stopifnot (n > 0) if (n == 1) { return(0) } else if (n == 2) { #обратите внимание на пробел между else и if return(1) } else { return(FuncFibonacci(n - 1) + FuncFibonacci(n - 2)) } } FuncFibonacci(8)
Использование языка
Литература
- 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
- Norman Matloff. The Art of R Programming / Matloff N. - 2009 - 193 p. : http://heather.cs.ucdavis.edu/~matloff/132/NSPpart.pdf
К: The Art of R Programming — книга для тех, кто знаком (и знаком неплохо) с программированием. В ее приложениях находится хороший список литературы, включая ссылки на интернет-источники. -- АтрашкевичАндрей
КатегорияЯзыкиПрограммирования