Разница между 1.339 и текущей версией ЯзыкR.
@@ -1,6 +1,5 @@
-- Язык R
+= Язык R
 
-----
 ''''''ToDo'''''' статьи:
 	* привести в нормальное состояние примеры --АтрашкевичАндрей
 	* написать про data.frame --АтрашкевичАндрей
@@ -14,24 +13,24 @@
 
 http://www.r-project.org/Rlogo.jpg
 
--- Общее описание языка R
+- Общее описание языка R
 
 R — простой и полезный язык для статистики, машинного обучения и DataMining, распространяемый по лицензии GNU GPL 2.
 
 Главная страница проекта: http://www.r-project.org/
 
-Скачать бинарники R можно [http://cran.gis-lab.info/|здесь] (российское зеркало, доступны версии для UNIX (Linux), Windows, OS X). Пользователям Ubuntu и Debian скачивать ничего не нужно: можно установить пакеты r-base, r-base-dev, r-base-cor:
+Скачать бинарники 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|тут].
+Более подробно об установке 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.
 
--- Соглашения оформления кода
+- Соглашения оформления кода
 
 	1 Оператор присвоения <- вместо = (соблюдение этого соглашения показывает, что вы super high-level extremely professional advanced R-programmer, кроме того, это придаёт коду изящную «эрность»-).
 	1 Имена переменных записываются в ''''''lowerCamelCase'''''', например: ''''''monthlyAnnuity'''''',  ''''''numberOfIterations''''''.
@@ -39,7 +38,7 @@
 	1 В некоторых случаях, когда это целесообразно, используется венгерская нотация: ''''''vPayments'''''' — вектор, ''''''dfPayments'''''' — таблица (data.frame).
 	1 etc. — добавить
 
--- Программа «Hello, world!»
+- Программа «Hello, world!»
 
 Для присвоения переменной значения в R используется оператор <-. Оператор = также поддерживается, но не соответствует соглашениям. Поэтому во всех дальнейших примерах использовует только оператор <-.
 
@@ -47,7 +46,7 @@
 
  '''> hw <- "Hello, world!"'''
  '''> + print(hw)'''
- \[1] "Hello, world!"
+ [1] "Hello, world!"
 
 R чувствителен к регистру, поэтому будьте внимательны и соблюдайте соглашения оформления кода.
 
@@ -60,15 +59,15 @@
  '''> # в R нет многострочных комментариев'''
  '''> + "Hello, world!" -> hw'''
  '''> + hw  # такой способ работает только в интерактивном режиме'''
- \[1] "Hello, world!"
+ [1] "Hello, world!"
 
 Иногда удобно вывести на печать переменную сразу после присвоения значения. Для этого используется заключение операции присвоения в круглые скобки. Подобная конструкция возможна также только в интерактивном режиме.
  '''> (hw <- "Hello, world!")'''
- \[1] "Hello, world!"
+ [1] "Hello, world!"
 
 R — скриптовый язык, поэтому остальные примеры будут даваться как запись скриптов.
 
--- R как калькулятор
+- R как калькулятор
 
 Все имеющиеся т.н. «статистические» пакеты можно условно разделить на три категории:
 	* библиотеки высокоуровневых ЯП (Seismic UNIX в Си, Pandas в Python) и специализированные языки для математических (включая статистические) вычисления: GNU Octave, Julia, MATLAB, MATCAD
@@ -79,35 +78,35 @@
 
 С его помощью можно выполнять элементарные арифметические действия:
 
-%NF
+===
 2 + 2
-%NE
+===
 
- \[1] 4
+ [1] 4
 
 Можно выполнять чуть более сложные:
 
-%NF
+===
 12 + 5 * (3 - 7) + 24 / 4.8
-%NE
+===
 
- \[1] -3
+ [1] -3
 
 Можно работать через переменные:
 
-%NF
+===
 a <- 2
 b <- 3
 (c <- a + b)
 (c <- c + 6)
-%NE
+===
 
- \[1] 5
- \[1] 11
+ [1] 5
+ [1] 11
 
 А можно использовать и для довольно сложных вычислений. В примере - вычисление значения функции Гомпертца.
 
-%NF
+===
 # https://goo.gl/LQ0NjQ — функция Гомпертца
 
 #  параметры функции: заметим, что b, c < 0
@@ -124,121 +123,121 @@
 # функция cat() объединяет свои аргументы в одну строку
 # "\n" означает перевод каретки на новую строку
 cat("Gompertz Value = ", gompertzValue, "\n")
-%NE
+===
 
- \[1] Gompertz Value =  0.9919975
+ [1] Gompertz Value =  0.9919975
 
--- Векторы
+- Векторы
 
 Векторы в R — один из наиболее часто используемых объектов. Вектор в R понимается не как элемент векторного пространства (то есть не в строгом математическом смысле), а как набор однородных данных. Можно сказать, что вектор в R — массив (или контейнер) однородных данных.
 
 Для инициализации переменной-вектора кроме оператора присвоения <- используется также оператор ''c''(). С его помощью можно создать любой вектор, включая «пустой», т.е. не содержащий ни одного значения. Длина такого вектора будет равняться нулю.
 
-%NF
+===
 (empVec <- c())  # пустой вектор
 empVecLen <- length(empVec)  # функция length() возвращает длину вектора
-%NE
+===
 
- \[1] NULL
- \[1] 0
+ [1] NULL
+ [1] 0
 
 Векторы имеют фундаментальное значение в R. Часто говорят, что R — полностью векторный язык. Например, в циклы в R проходят по элементам вектора. Пример задания такого вектора (не требуется оператора c()):
 
-%NF
+===
 vec <- 1:5
 # кто сказал «Похоже на Питон»?
 vec
-%NE
+===
 
- \[1] 1 2 3 4 5
+ [1] 1 2 3 4 5
 
 Векторы также можно задать простым перечислением его элементов.
 
-%NF
+===
 vec <- c(1, 5, 12, 6.78, 5.4645)
 vec
-%NE
- \[1]  1.0000  5.0000 12.0000  6.7800  5.4645
+===
+ [1]  1.0000  5.0000 12.0000  6.7800  5.4645
 
 Нумерация элементов вектора начинается с 1, а не с 0, как, например, в Си (а также во многих других языках программирования). Чтобы указать определенный элемент или элементы вектора используются квадратные скобки.
 
-%NF
+===
 vec <- c(1, 5, 12, 6.78, 5.4645)
 vec[1]		# первый элемент
 vec[2:4]	# элементы со второго по четвёртый
 vec[c(1, 3:5)]  # первый элемент и элементы с третьего по пятый
-%NE
+===
 
- \[1] 1
- \[1]  5.00 12.00  6.78
- \[1]  1.0000 12.0000  6.7800  5.4645
+ [1] 1
+ [1]  5.00 12.00  6.78
+ [1]  1.0000 12.0000  6.7800  5.4645
 
 Обратите внимание на то, что во втором и третьем случае для указания элементов вектора vec мы использовали другие векторы.
 
 Числа в R - это вектора единичной длины. Именно в этом смысле стоит понимать широко распространенную фразу, что в R нет числовых скаляров. Чтобы убедиться в этом, можно использовать следующий код:
 
-%NF
+===
 a <- 1
 # функция is.vector() возвращает значение ИСТИНА,
 # если её аргумент — вектор, иначе — ЛОЖЬ
 is.vector(a)
-%NE
+===
 
- \[1] TRUE
+ [1] TRUE
 
 В оператор c(), как уже, наверное, понятно, можно передавать вектора, например:
 
-%NF
+===
 firstVec  <- c(1, 3:5)
 secondVec <- c(7, 9:11)
 
 thirdVec <- c(firstVec, secondVec)
 thirdVec
-%NE
+===
 
- \[1]  1  3  4  5  7  9 10 11
+ [1]  1  3  4  5  7  9 10 11
 
 Числовые вектора в R — важный, но всё же частный случай. Вектор, как контейнер данных, может хранить и нечисловые значения. Можно задать вектор, состоящий из строк.
 
-%NF
+===
 vec <- c("one", "two", "three")
-vec\[2]
-%NE
+vec[2]
+===
 
- \[1] "two"
+ [1] "two"
 
 Если в векторе встречаются и строки, и числа, то все элементы вектора, будут строками.
 
-%NF
+===
 vec <- c(1, "two", 3)
 # функция is.numeric() возвращает значение ИСТИНА, если ее аргумент - число, иначе ЛОЖЬ
-is.numeric(vec\[1])
-%NE
+is.numeric(vec[1])
+===
 
- \[1] FALSE
+ [1] FALSE
 
--- Функции, циклы и ветвления
+- Функции, циклы и ветвления
 
 Синтаксис любой функции в R выглядит следующим образом:
 
-%NF
+===
 FunctionName <- function(<argument1> <, argument2> <, ...>) {
     # R-code
     <return(valueToReturn)>
 }
-%NE
+===
 
 Можно использовать упрощенный синтаксис (что делать крайне не советую — АтрашкевичАндрей)
 
-%NF
+===
 FunctionName <- function(<argument1> <, argument2> <, ...>)
     # R-code
     <return(valueToReturn)>
-%NE
+===
 
 Примеры функций:
 
-%NF
+===
 # Пример 1: квадрат числа
 SquareOfNum <- function(x) {
     res <- x ^ 2
@@ -248,11 +247,11 @@
 arg    <- 2.65
 result <- SquareOfNum(arg)
 result
-%NE
+===
 
- \[1] 7.0225
+ [1] 7.0225
 
-%NF
+===
 # Пример 2 : экспонента первого числа минус куб второго
 ExpMinusCube <- function(x, y) {
    res <- exp(x)
@@ -265,13 +264,13 @@
 
 res <- ExpMinusCube(a, b)
 res
-%NE
+===
 
- \[1] -3.841399
+ [1] -3.841399
 
 В качестве аргументов функции может выступать любой (?почти любой) объект R: вектор, число (вектор единичной длины), строка, таблица (data.frame) и т.п.
 
-%NF
+===
 # Пример 3: норма n-мерного вектора
 NormaVectora <- function(vect) {
     # эта конструкция позволяет остановить исполнение функции, если
@@ -286,42 +285,42 @@
 someVec <- c(7, 8, -3)
 vecNorm <- NormaVectora(someVec)
 vecNorm
-%NE
+===
 
- \[1] 4.898979
+ [1] 4.898979
 
 
 
--- Циклы
+- Циклы
 
 Цикл (любого типа) — базовая конструкция практически любого языка программирования.
 
 Синтаксис цикла типа ''for'' (цикла со счётчиком) в R выглядит следующим образом:
 
-%NF
+===
 for (i in vect) {
     # тело цикла
 }
-%NE
+===
 
 Вместо i может быть, естественно, любое другое приемлемое имя переменной.
 
 Как было сказано выше, цикл в R проходит значения вектора. Чтобы проиллюстрировать это, приведём несколько примеров.
 
-%NF
+===
 # Пример цикла 1:
 for (i in 1:5) {
     print(i) 
 }
-%NE
+===
 
- \[1] 1
- \[1] 2
- \[1] 3
- \[1] 4
- \[1] 5
+ [1] 1
+ [1] 2
+ [1] 3
+ [1] 4
+ [1] 5
 
-%NF
+===
 # Пример цикла 2:
 vLoop <- c(1:3, 100:105)
 print("вектор обхода")
@@ -331,20 +330,20 @@
 for (i in vLoop) {
     print(i)
 }
-%NE
+===
 
- \[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
+ [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
 
 Если необходимо задать шаг итерации, то запись несколько отличается:
 
@@ -355,7 +354,7 @@
 ----
 
  # инкрементное решение
-%NF
+===
 FuncFactorialIteraion <- function(n){
   stopifnot (n > 0)  # если условие в скобках не ИСТИНА, значит прекращается исполнение
   factorial <- 1
@@ -365,7 +364,7 @@
   return(factorial)
 }
 FuncFactorialIteraion(5)
-%NE
+===
 ----
 
 Для проверки условий ветвлений используются логические выражения (принимающие одно из возможных значений: ИСТИНА или ЛОЖЬ). Для записи логических выражений используются логические операторы И, ИЛИ, НЕ. В синтаксисе R: &, |, ! — соответственно.
@@ -388,7 +387,7 @@
 
  # рекурсивное решение
 
-%NF
+===
 FuncFactiorialRecur <- function(n) {
   stopifnot (n >= 0)
   if (n == 0) {
@@ -398,12 +397,12 @@
   }
 } 
 FuncFactiorialRecur(4)
-%NE
+===
 
 
--- Числа Фибоначчи
+- Числа Фибоначчи
 
-%NF
+===
 # последовательность Фибоначчи F = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...}:
 # начиная с третьего элемента (первый и второй — 0 и 1 соответственно) значение
 # элемента последовательности равно сумме предыдущих двух элементов
@@ -418,11 +417,11 @@
   }
 }
 FiboSeries(8)
-%NE
+===
 
- \[1] 13
+ [1] 13
 
--- Использование языка
+- Использование языка
 
 Язык R — монокультура экономико-математических вычислений. Он прекрасно подходит как для эконометристов (здесь должна быть шутка про количественных экономистов и метеорологов), лоботомированных микро- и макро- экономикой в их современном изводе, так и для технарей-математиков-программистов, которые работают в сфере количественных финансов (для них чаще всего лоботомия происходила в форме из-рук-вон-преподавания-программирования). Благодаря чрезвычайно низкому порогу вхождения, элементарному до дебилизма синтаксису, фантастической распространённости и большому количеству написанных библиотек (QWERTY-эффект), возможности писать код использую преимущественно спинной мозг, R может, по скромному мнению одного из авторов статьи, получить почётное звание «Вижал Васик нашего поколения для статистиков и экономистов».
 
@@ -431,12 +430,12 @@
 -- Сравнение с другими языками
 Следующей монокультурой в пространстве статистических языков программирования по моим прогнозам (АтрашкевичАндрей) должен стать язык Julia. Уже есть некоторые указания на то, что этот процесс запущен и идет. Например, Julia начинают пиарить в «илитных» ВУЗах и факультетах по математическим методам в экономике и по прикладной математике в экономике. До R монокультурой был EViews (пиарился эконометристами РЭШ) и, частично, gretl (пиарился эконометристами ВШЭ). Монокультурой на ПМ-ПУ ''''''СПбГУ'''''' (привсем уважении) был, есть и остается MATLAB (и его детище ''''''SimuLink''''''). Хотя 98% «экономистов» дальше ''=СУММЕСЛИ''() в MS Excel вообще ничего никогда не используют.
 
--- Литература
+- Литература
 
 %R(
 %Q R Core Team
 %D 2014
-%T R Language Definition. Version 3.2.2 (2015-08-14) DRAFT 
+%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
 
@@ -444,7 +443,7 @@
 %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.1.2 (2014-10-31)
+%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