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

Содержание

Язык R

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

Простой и полезный язык для статистики, машинного обучения и DataMining.

История создания

Конвенции именования

За основу конвенций был принят «Google's R Style Guide»: https://google-styleguide.googlecode.com/svn/trunk/Rguide.xml

Выжимка: Имена переменных пишутся маленькими буквами с точкой как разделителем. Имена функций пишуется в UpperCamelCase?. В качестве отступов — двойные пробелы. Остальное — читайте.

От себя: использовал «венгерскую нотацию» по чисто педагогическим причинам (и далеко не везде). Незнакомым с программированием (экономистам, биологам и пр.) гораздо проще понимать так.

Программа «Hello, world!»

 #это однострочный комментарий
 hw.str <- "Hello, world!" #ввод переменной
 print(hw.str) #вывод переменной
 print(HW.str) #это строчка выдаст ошибку, т.к. R чувствителен к регистру

 #в R нет многострочных комментариев
 "Hello, world!" -> hw.str #стрелочка работает в обе стороны
 hw.str #так удобнее всего, наверное, удобнее всего выводить на печать

 (hw.str <- "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 #наверное, выведет 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.vec <- c() #используется оператор c()
 empty.vec

 #вектор можно задать простым перечислением элементов
 first.vec <- c(1, 5, 12, 6.78, 5.4645)
 first.vec #выведет весь вектор
 #нумерация элементов вектор начинается с 1, а не с 0, как, например, в Си
 first.vec[1] #покажет первый элемент вектора
 first.vec[4] #покажет четвертый элемент вектора, т.е. 6.78
 first.vec[2:4] #покажет элементы со второго по четвертый

 #можно задать вектор, состоящий из строк
 second.vec <- c("one", "two", "three")
 second.vec[2]

 #если в векторе встречаются и строки, и числа, то все элементы вектора, будут строками
 second.vec <- c(1, "two", 3)
 is.numeric(second.vec[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

В этом случае можно писать код только в строчку после закрывающей скобки.


 #квадрат числа
 FuncOne? <- function(x) x^2
 FuncOne?(2.75) #вернет 7.5625

 #экспонента числа минус его куб
 FuncTwo? <- function(x){
   result <- exp(x)
   result <- result - x**3 #степень можно записать и как "^", и как "**"
   return(result)
 }
 FuncTwo?(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
 }

 #инкрементное решение
 FuncFactorialIteraion? <- function(n){
   #знак ";" обязательно нужен только в таких случаях записи более одной команды в строчку
   stopifnot (n > 0); factorial <- 1 #если условие в скобках не ИСТИНА, значит прекращается исполнение
   for (i in 1:n) {
     factorial <- factorial * i
    }
   return(factorial)
 }
 FuncFactorialIteraion?(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 все ЛОЖЬ
 }

 #рекурсивное решение
 FuncFactiorialRecur? <- function(n) {
   stopifnot(n >= 0)
   if(n == 0) {
     return(1)
   } else {
     return(n * Func.Factorial.Recur(n - 1)) #вызов функции из самой себя
   }
 } 
 FuncFactiorialRecur?(4) #должен вернуть 24

Числа Фибоначчи

 #последовательность Фибоначчи 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(Func.Fibonacci(n - 1) + Func.Fibonacci(n - 2))
   }
 }
 FuncFibonacci?(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
  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 — книга для тех, кто знаком (и знаком неплохо) с программированием. В ее приложениях находится хороший список литературы, включая ссылки на интернет-источники. -- АтрашкевичАндрей