Разница между 1.181 и текущей версией ЯзыкR.
@@ -1,192 +1,349 @@
-- Язык R
+= Язык R
+
+''''''ToDo'''''' статьи:
+	* привести в нормальное состояние примеры --АтрашкевичАндрей
+	* написать про data.frame --АтрашкевичАндрей
+	* Написать про help() --ЛипинБорис
+	* Написать про поддержку векторизации вычислений --ЛипинБорис
+	* привести примеры статистических функций --АтрашкевичАндрей
+	* привести в нормальное состояние список литературы --АтрашкевичАндрей
+		* коллеги, пожалуйста проверьте исправленный список литературы --АтрашкевичАндрей
+	* добавить сравнение с другими языками программирования, используемыми преимущественно для целей статистики --АтрашкевичАндрей
+----
 
 http://www.r-project.org/Rlogo.jpg
 
--- Общее описание языка 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 -- ПетрунёвАлексей
-----
+Скачать бинарники R можно [[http://cran.gis-lab.info/|здесь]] (российское зеркало, доступны версии для UNIX (Linux), Windows, OS X). Пользователям Ubuntu и Debian скачивать ничего не нужно: можно установить пакеты r-base, r-base-dev, r-base-cor:
+ $ 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.
+В 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
+- Соглашения оформления кода
 
-Примеры кода ниже соответствуют этим соглашениям. 
+	1 Оператор присвоения <- вместо = (соблюдение этого соглашения показывает, что вы super high-level extremely professional advanced R-programmer, кроме того, это придаёт коду изящную «эрность»-).
+	1 Имена переменных записываются в ''''''lowerCamelCase'''''', например: ''''''monthlyAnnuity'''''',  ''''''numberOfIterations''''''.
+	1 Имена функция в ''''''UpperCamelCase'''''': ''''''CalculateAnnuity'''''', ''''''GetNextValue'''''', ''''''SubstractUniqueSubstrings''''''.
+	1 В некоторых случаях, когда это целесообразно, используется венгерская нотация: ''''''vPayments'''''' — вектор, ''''''dfPayments'''''' — таблица (data.frame).
+	1 etc. — добавить
 
-----
-	* К: использовал «венгерскую нотацию» по чисто педагогическим причинам (и далеко не везде). Незнакомым с программированием (экономистам, биологам и пр.) гораздо проще понимать на начальном уровне (сужу по себе, кстати) -- АтрашкевичАндрей.
+- Программа «Hello, world!»
 
-----
+Для присвоения переменной значения в R используется оператор <-. Оператор = также поддерживается, но не соответствует соглашениям. Поэтому во всех дальнейших примерах использовует только оператор <-.
 
--- Программа «Hello, world!»
+Чтобы в консоли осуществить перевод каретки, необходимо нажать на Shift + Enter. Подобная операция поставит в начале следующей строки знак +.
 
- '''# это однострочный комментарий'''
- '''str.hw <- "Hello, world!" # ввод переменной'''
- '''print(str.hw) # вывод переменной'''
+ '''> hw <- "Hello, world!"'''
+ '''> + print(hw)'''
  [1] "Hello, world!"
-----
 
- '''str.hw <- "Hello, world!" # ввод переменной'''
- '''print(str.HW) # это строчка выдаст ошибку, т.к. R чувствителен к регистру'''
- Ошибка в print(str.HW) : объект 'str.HW' не найден
+R чувствителен к регистру, поэтому будьте внимательны и соблюдайте соглашения оформления кода.
 
-----
+ '''> hw <- "Hello, world!"'''
+ '''> + print(HW)'''
+ Ошибка в print(HW) : объект 'HW' не найден
+
+Оператор присвоения работает в обе стороны, поэтому можно писать как <-, так и ->.
 
- '''# в R нет многострочных комментариев'''
- '''"Hello, world!" -> str.hw # стрелочка работает в обе стороны'''
- '''str.hw # так удобнее всего, наверное, удобнее всего выводить на печать'''
+ '''> # в R нет многострочных комментариев'''
+ '''> + "Hello, world!" -> hw'''
+ '''> + hw  # такой способ работает только в интерактивном режиме'''
  [1] "Hello, world!"
 
-----
- '''# иногда так удобно: сразу присвоил значение и вывел на печать'''
- '''(str.hw <- "Hello, world!")'''
+Иногда удобно вывести на печать переменную сразу после присвоения значения. Для этого используется заключение операции присвоения в круглые скобки. Подобная конструкция возможна также только в интерактивном режиме.
+ '''> (hw <- "Hello, world!")'''
  [1] "Hello, world!"
-----
 
--- R как калькулятор
+R — скриптовый язык, поэтому остальные примеры будут даваться как запись скриптов.
+
+- R как калькулятор
 
 Все имеющиеся т.н. «статистические» пакеты можно условно разделить на три категории:
 	* библиотеки высокоуровневых ЯП (Seismic UNIX в Си, Pandas в Python) и специализированные языки для математических (включая статистические) вычисления: GNU Octave, Julia, MATLAB, MATCAD
-	* «взбесившиеся» научные калькуляторы: помимо R к ним относятся Gretl (GNU Regression, Econometrics and Times-series Library), GAUSS.
+	* «взбесившиеся» научные калькуляторы: помимо R к ним относятся Gretl (GNU Regression, Econometrics and Times-series Library), GAUSS, EViews.
 	* «взбесившиеся»  табличные процессоры: работа с ними напоминает MS Excel, у которого оставили только VBA-редактор (например, SAS Base — фактический стандарт в банковской и страховой индустриях, STATA или Statistica) или существенно урезали возможности редактирования редактирования ячеек и «кнопочные» функции и меню (SPSS и SAS Enterprise Guide).
 
-R можно использовать как хороший научный и статистический калькулятор.
+R можно использовать как хороший научный и статистический калькулятор. 
 
-----
+С его помощью можно выполнять элементарные арифметические действия:
+
+===
+2 + 2
+===
 
- '''2 + 2'''
  [1] 4
 
+Можно выполнять чуть более сложные:
 
-----
+===
+12 + 5 * (3 - 7) + 24 / 4.8
+===
 
- '''12 + 5 * (3 - 7) + 24/4.8'''
  [1] -3
 
-----
+Можно работать через переменные:
+
+===
+a <- 2
+b <- 3
+(c <- a + b)
+(c <- c + 6)
+===
 
- '''a <- 2 # переменной с именем "a" присвоим значение 2'''
- '''b <- 3 # переменной с именем "b" присвоим значение 3'''
- '''a + b # выведем сумму переменных с именами "a" и "b"'''
  [1] 5
-----
+ [1] 11
 
- '''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
-----
+===
+# https://goo.gl/LQ0NjQ — функция Гомпертца
 
--- Векторы
+#  параметры функции: заметим, что b, c < 0
+a <- 0.993   # верхняя ассимптота
+b <- -2.63   # смещение по t (оси абсцисс — оси времени)
+c <- -1.257  # масштабирование по t (оси абсцисс — оси времени)
 
-Векторы в R — один из двух наиболее часто используемых объектов. Вектор в R понимается не как элемент векторного пространства (то есть не в строго математическом смысле), а как набор однородных данных. Можно сказать, что вектор в R — массив (или контейнер) однородных данных. Числовые вектора в R — частный случай. Кроме того, следует особенно отметить, что произвольное число в R — это вектор единичной длины.
+#  аргумент функции
+t <- 6.2567  # момент времени
 
-----
+# вычисление значения функции Гомпертца в указанный момент времени с заданными параметрами
+gompertzValue <- a * exp(b * exp(c * t))
 
- '''# вектор, не содержащий элементов'''
- '''vec.empty <- c() # для инициализации вектора используется оператор c()'''
- '''vec.empty'''
- NULL
+# функция cat() объединяет свои аргументы в одну строку
+# "\n" означает перевод каретки на новую строку
+cat("Gompertz Value = ", gompertzValue, "\n")
+===
 
-----
+ [1] Gompertz Value =  0.9919975
+
+- Векторы
+
+Векторы в R — один из наиболее часто используемых объектов. Вектор в R понимается не как элемент векторного пространства (то есть не в строгом математическом смысле), а как набор однородных данных. Можно сказать, что вектор в R — массив (или контейнер) однородных данных.
+
+Для инициализации переменной-вектора кроме оператора присвоения <- используется также оператор ''c''(). С его помощью можно создать любой вектор, включая «пустой», т.е. не содержащий ни одного значения. Длина такого вектора будет равняться нулю.
 
- '''#вектор можно задать простым перечислением элементов'''
- '''vec.first <- c(1, 5, 12, 6.78, 5.4645)'''
- '''vec.first'''
+===
+(empVec <- c())  # пустой вектор
+empVecLen <- length(empVec)  # функция length() возвращает длину вектора
+===
+
+ [1] NULL
+ [1] 0
+
+Векторы имеют фундаментальное значение в R. Часто говорят, что R — полностью векторный язык. Например, в циклы в R проходят по элементам вектора. Пример задания такого вектора (не требуется оператора c()):
+
+===
+vec <- 1:5
+# кто сказал «Похоже на Питон»?
+vec
+===
+
+ [1] 1 2 3 4 5
+
+Векторы также можно задать простым перечислением его элементов.
+
+===
+vec <- c(1, 5, 12, 6.78, 5.4645)
+vec
+===
  [1]  1.0000  5.0000 12.0000  6.7800  5.4645
- '''# нумерация элементов вектора начинается с 1, а не с 0, как, например, в Си'''
- '''# элемент вектора задается через [], например, some.vec[num.of.element]'''
- '''vec.first[1]'''
+
+Нумерация элементов вектора начинается с 1, а не с 0, как, например, в Си (а также во многих других языках программирования). Чтобы указать определенный элемент или элементы вектора используются квадратные скобки.
+
+===
+vec <- c(1, 5, 12, 6.78, 5.4645)
+vec[1]		# первый элемент
+vec[2:4]	# элементы со второго по четвёртый
+vec[c(1, 3:5)]  # первый элемент и элементы с третьего по пятый
+===
+
  [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)]'''
+ [1]  1.0000 12.0000  6.7800  5.4645
 
-----
+Обратите внимание на то, что во втором и третьем случае для указания элементов вектора vec мы использовали другие векторы.
 
- '''# можно задать вектор, состоящий из строк'''
- '''vec.second <- c("one", "two", "three")'''
- '''vec.second[2]'''
- [1] "two"
+Числа в R - это вектора единичной длины. Именно в этом смысле стоит понимать широко распространенную фразу, что в R нет числовых скаляров. Чтобы убедиться в этом, можно использовать следующий код:
 
-----
+===
+a <- 1
+# функция is.vector() возвращает значение ИСТИНА,
+# если её аргумент — вектор, иначе — ЛОЖЬ
+is.vector(a)
+===
 
- # если в векторе встречаются и строки, и числа, то все элементы вектора, будут строками
- second.vec <- c(1, "two", 3)
- # функция is.numeric() возвращает ИСТИНА, если ее аргумент - число, иначе ЛОЖЬ
- is.numeric(second.vec[1])
+ [1] TRUE
 
--- Функции, ветвления и циклы
+В оператор c(), как уже, наверное, понятно, можно передавать вектора, например:
 
-Синтаксис любой функции в R выглядит следующим образом:
+===
+firstVec  <- c(1, 3:5)
+secondVec <- c(7, 9:11)
 
- ''''''FunctionName'''''' <- function(''<argument.1>, <argument.2>, ...''){
-   # code
-   <return(''value.to.return'')>
- }
+thirdVec <- c(firstVec, secondVec)
+thirdVec
+===
 
-Можно использовать упрощенный синтаксис (что делать крайне не советую — АтрашкевичАндрей)
+ [1]  1  3  4  5  7  9 10 11
 
- ''''''FunctionName'''''' <- function(''<argument.1>, <argument.2>, ...'') 
-   # code here
+Числовые вектора в R — важный, но всё же частный случай. Вектор, как контейнер данных, может хранить и нечисловые значения. Можно задать вектор, состоящий из строк.
 
-Показан только синтаксис, соответствующий объявленным выше соглашениям оформления кода.
+===
+vec <- c("one", "two", "three")
+vec[2]
+===
 
-----
+ [1] "two"
 
- # квадрат числа
- ''''''FuncOne'''''' <- function(x) 
-   x^2
- ''''''FuncOne''''''(2.75)
+Если в векторе встречаются и строки, и числа, то все элементы вектора, будут строками.
 
-----
+===
+vec <- c(1, "two", 3)
+# функция is.numeric() возвращает значение ИСТИНА, если ее аргумент - число, иначе ЛОЖЬ
+is.numeric(vec[1])
+===
 
- # экспонента числа минус его куб
- ''''''FuncTwo'''''' <- function(x){
-   result <- exp(x)
-   result <- result - x**3 # степень можно записать и как "^", и как "**"
-   return(result)
- }
- ''''''FuncTwo''''''(6.5)
+ [1] FALSE
 
--- Вычисление факториала
+- Функции, циклы и ветвления
 
-Синтаксис цикла for:
+Синтаксис любой функции в R выглядит следующим образом:
 
- for(''iterator.name'' in ''start.value'':''stop.value''){
-   # code
- }
+===
+FunctionName <- function(<argument1> <, argument2> <, ...>) {
+    # R-code
+    <return(valueToReturn)>
+}
+===
+
+Можно использовать упрощенный синтаксис (что делать крайне не советую — АтрашкевичАндрей)
+
+===
+FunctionName <- function(<argument1> <, argument2> <, ...>)
+    # R-code
+    <return(valueToReturn)>
+===
+
+Примеры функций:
+
+===
+# Пример 1: квадрат числа
+SquareOfNum <- function(x) {
+    res <- x ^ 2
+    return(res)
+}
+
+arg    <- 2.65
+result <- SquareOfNum(arg)
+result
+===
+
+ [1] 7.0225
+
+===
+# Пример 2 : экспонента первого числа минус куб второго
+ExpMinusCube <- function(x, y) {
+   res <- exp(x)
+   res <- res - x**3  # степень можно записать и как «^», и как «**»
+   return(res)
+}
+
+a <- 2.56
+b <- 1.75
+
+res <- ExpMinusCube(a, b)
+res
+===
+
+ [1] -3.841399
+
+В качестве аргументов функции может выступать любой (?почти любой) объект R: вектор, число (вектор единичной длины), строка, таблица (data.frame) и т.п.
+
+===
+# Пример 3: норма n-мерного вектора
+NormaVectora <- function(vect) {
+    # эта конструкция позволяет остановить исполнение функции, если
+    # аргумент в операторе stopifnot принимает значение ЛОЖЬ
+    stopifnot(is.vector(vect))  # проверяем, что переданный аргумент — вектор
+    
+    # норма вектора в линейном пространстве — квадратный корень суммы квадратов координат
+    res <- sqrt(sum(vect*2)) 
+    return(res)
+}
+
+someVec <- c(7, 8, -3)
+vecNorm <- NormaVectora(someVec)
+vecNorm
+===
+
+ [1] 4.898979
+
+
+
+- Циклы
+
+Цикл (любого типа) — базовая конструкция практически любого языка программирования.
+
+Синтаксис цикла типа ''for'' (цикла со счётчиком) в R выглядит следующим образом:
+
+===
+for (i in vect) {
+    # тело цикла
+}
+===
+
+Вместо i может быть, естественно, любое другое приемлемое имя переменной.
+
+Как было сказано выше, цикл в R проходит значения вектора. Чтобы проиллюстрировать это, приведём несколько примеров.
+
+===
+# Пример цикла 1:
+for (i in 1:5) {
+    print(i) 
+}
+===
+
+ [1] 1
+ [1] 2
+ [1] 3
+ [1] 4
+ [1] 5
+
+===
+# Пример цикла 2:
+vLoop <- c(1:3, 100:105)
+print("вектор обхода")
+vLoop
+
+print("обход цикла")
+for (i in vLoop) {
+    print(i)
+}
+===
+
+ [1] "вектор обхода"
+ [1]   1   2   3 100 101 102 103 104 105
+ [1] "обход цикла"
+ [1] 1
+ [1] 2
+ [1] 3
+ [1] 100
+ [1] 101
+ [1] 102
+ [1] 103
+ [1] 104
+ [1] 105
 
 Если необходимо задать шаг итерации, то запись несколько отличается:
 
@@ -197,16 +354,17 @@
 ----
 
  # инкрементное решение
- ''''''FuncFactorialIteraion'''''' <- function(n){
-   stopifnot (n > 0) # если условие в скобках не ИСТИНА, значит прекращается исполнение
-   factorial <- 1
-   for (i in 1:n) {
-     factorial <- factorial * i
-    }
-   return(factorial)
- }
- ''''''FuncFactorialIteraion''''''(5)
-
+===
+FuncFactorialIteraion <- function(n){
+  stopifnot (n > 0)  # если условие в скобках не ИСТИНА, значит прекращается исполнение
+  factorial <- 1
+  for (i in 1:n) {
+    factorial <- factorial * i
+   }
+  return(factorial)
+}
+FuncFactorialIteraion(5)
+===
 ----
 
 Для проверки условий ветвлений используются логические выражения (принимающие одно из возможных значений: ИСТИНА или ЛОЖЬ). Для записи логических выражений используются логические операторы И, ИЛИ, НЕ. В синтаксисе R: &, |, ! — соответственно.
@@ -228,44 +386,83 @@
 ----
 
  # рекурсивное решение
- ''''''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
-	1 Paradis E. R for beginners / Paradis E. - 2005 - 72 p. : http://cran.r-project.org/doc/contrib/Paradis-rdebuts_en.pdf
-	1 Norman Matloff. The Art of R Programming / Matloff N. - 2009 - 193 p. : http://heather.cs.ucdavis.edu/~matloff/132/NSPpart.pdf
+===
+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, ...}:
+# начиная с третьего элемента (первый и второй — 0 и 1 соответственно) значение
+# элемента последовательности равно сумме предыдущих двух элементов
+FiboSeries <- function(n) {
+  stopifnot (n > 0)
+  if (n == 1) {
+    return(0)
+  } else if (n == 2) {  # обратите внимание на пробел между else и if
+    return(1)
+  } else {
+    return(FiboSeries(n - 1) + FiboSeries(n - 2))
+  }
+}
+FiboSeries(8)
+===
+
+ [1] 13
+
+- Использование языка
+
+Язык R — монокультура экономико-математических вычислений. Он прекрасно подходит как для эконометристов (здесь должна быть шутка про количественных экономистов и метеорологов), лоботомированных микро- и макро- экономикой в их современном изводе, так и для технарей-математиков-программистов, которые работают в сфере количественных финансов (для них чаще всего лоботомия происходила в форме из-рук-вон-преподавания-программирования). Благодаря чрезвычайно низкому порогу вхождения, элементарному до дебилизма синтаксису, фантастической распространённости и большому количеству написанных библиотек (QWERTY-эффект), возможности писать код использую преимущественно спинной мозг, R может, по скромному мнению одного из авторов статьи, получить почётное звание «Вижал Васик нашего поколения для статистиков и экономистов».
+
+Если же говорить серьёзнее, то R — вполне неплохой инструмент для решения определённых задач: получить описательные статистики выборки в подгруппах, построить бинарную регрессию, кластеризовать данные, создать дерево принятия решения, решить несложную оптимизационную задачу.
+
+-- Сравнение с другими языками
+Следующей монокультурой в пространстве статистических языков программирования по моим прогнозам (АтрашкевичАндрей) должен стать язык Julia. Уже есть некоторые указания на то, что этот процесс запущен и идет. Например, Julia начинают пиарить в «илитных» ВУЗах и факультетах по математическим методам в экономике и по прикладной математике в экономике. До R монокультурой был EViews (пиарился эконометристами РЭШ) и, частично, gretl (пиарился эконометристами ВШЭ). Монокультурой на ПМ-ПУ ''''''СПбГУ'''''' (привсем уважении) был, есть и остается MATLAB (и его детище ''''''SimuLink''''''). Хотя 98% «экономистов» дальше ''=СУММЕСЛИ''() в MS Excel вообще ничего никогда не используют.
+
+- Литература
+
+%R(
+%Q R Core Team
+%D 2014
+%T R Language Definition. Version 3.3.1 (2016-06-21) DRAFT 
+%P 60
+%U http://cran.r-project.org/doc/manuals/R-lang.pdf
+
+%A Venables W. N.
+%A Smith D.M.
+%A R Core Team
+%D 2014
+%T An Introduction to R. Notes on R: A Programming Environment for Data Analysis and Graphics. Version 3.3.1 (2016-06-21)
+%I W. N. Venables, D. M. Smith and the R Core Team
+%P 105
+%U http://cran.r-project.org/doc/manuals/R-intro.pdf
+
+%A Paradis E.
+%T R for beginners
+%D 2005
+%P 72
+%U http://cran.r-project.org/doc/contrib/Paradis-rdebuts_en.pdf
+
+%A Matloff Norman
+%T The Art of R Programming
+%D 2009
+%P 193
+%U http://heather.cs.ucdavis.edu/~matloff/132/NSPpart.pdf
+%R)
 
 ----
 
-	К: The Art of R Programming — книга для тех, кто знаком (и знаком неплохо) с программированием. В ее приложениях находится хороший список литературы, включая ссылки на интернет-источники. -- АтрашкевичАндрей
-
-----
+	К: The Art of R Programming — книга для тех, кто знаком (и знаком неплохо) с программированием. В ее приложениях находится хороший список литературы, включая ссылки на интернет-источники. --АтрашкевичАндрей
 
 # КатегорияЯзыкиПрограммирования