Это старая версия (1.179) ЯзыкR.

Содержание

Язык R

Общее описание языка R

R — простой и полезный язык для статистики, машинного обучения и DataMining, распространяемый по лицензии GNU GPL 2.

Главная страница проекта: http://www.r-project.org/




  • И так, для дистрибутивов 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!»

 # это однострочный комментарий
 str.hw <- "Hello, world!" # ввод переменной
 print(str.hw) # вывод переменной
 [1] "Hello, world!"

 str.hw <- "Hello, world!" # ввод переменной
 print(str.HW) # это строчка выдаст ошибку, т.к. R чувствителен к регистру
 Ошибка в 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 # переменной с именем "a" присвоим значение 2
 b <- 3 # переменной с именем "b" присвоим значение 3
 a + b # выведем сумму переменных с именами "a" и "b"
 [1] 5

 d <- 3 # переменной "d" присвоим значение 3
 d <- d + 5 # переменной "d" присвоим предыдущее её значение, прибавив 5
 d
 [1] 8

 # вычисление значения функции Гомпертца, для
 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 — частный случай.


 # вектор, не содержащий элементов
 vec.empty <- c() # для инициализации вектора используется оператор c()
 vec.empty
 NULL

 #вектор можно задать простым перечислением элементов
 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, как, например, в Си
 # элемент вектора задается через [], например, some.vec[num.of.element]
 vec.first[1]
 [1] 1
 vec.first[4]
 [1] 6.78
 vec.first[2:4]
 [1]  5.00 12.00  6.78
 vec.first[c(1, 3:5)]
 vec.first <- c(1, 5, 12, 6.78, 5.4645)
 

 # можно задать вектор, состоящий из строк
 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
  1. 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
  2. Paradis E. R for beginners / Paradis E. - 2005 - 72 p. : http://cran.r-project.org/doc/contrib/Paradis-rdebuts_en.pdf
  3. 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 — книга для тех, кто знаком (и знаком неплохо) с программированием. В ее приложениях находится хороший список литературы, включая ссылки на интернет-источники. -- АтрашкевичАндрей




КатегорияЯзыкиПрограммирования