R (программчлалын хэл)

R нь статистик тооцоолол, график дүрслэлд зоиулагдсан нээлттэй эх бүхий программчлалын хэл болон програм хангамж бөгөөд Статистик Тооцооллын R Сан дээр түшиглэдэг. R хэлийг статистикчид, өгөгдлийн уурхайчид статистикийн програм хангамж зохиох, мэдээлэлд дүн шинжилгээ хийх зэрэгт өргөн хэрэглэхийн зэрэгцээ сүүлийн жилүүдэд түүний хэрэглээ бусад чиглэлд ч хурдацтай өсөн нэмэгдэж байна.

R бол GNU програм хангамж юм. R програмын эх код C, Fortran, R хэл дээр бичигдсэн. R програмыг GNU GPL Олон Нийтийн Лиценз-ээр голлох үйлдлийн системүүд дээр үнэ төлбөргүй ашиглах боломжтой. Мөн R нь командын мөрнөөс ажилладаг тул зориулалтын график интерфейс бүхий програмаар дамжуулан ашиглах нь зүйтэй.

## Түүх 
R нь John Chambers гэдэг хүний Bell Labs-д ажиллаж байх үедээ зохиосон  дээр тулгуурласан. Эдгээрийн хооронд хэдэн чухал ялгаа байдаг ч S хэлээр бичигдсэн кодын ихэнх нь R дээр шууд ажилладаг.

R програмыг Росс Ihaka , Роберт Gentleman нар Шинэ Зеландын Веллингтон Их Сургууль-д байх үедээ зохиосон бөгөөд одоогоор *R Development Core Team* хөгжүүлж байна. S хэлний зохиогч Chambers уг багийн нэг гишүүн юм. R гэх нэр нь түүнийг анхлан зохиогчдын нэр болон гол суурь нь болсон S хэлний нэртэй холбоотой. Төсөл 1992 онд санаачлагдсан бол анхны хувилбар нь 1995 онд гарсан. Харин тогтвортой beta хувилбар нь 2000 онд гарсан.

## R програм Монгол улсад 
R програмыг хэрэглэх, R хэлийг судлах явдал Монгол улсад улам бүр дэлгэрч буй бөгөөд үүнийг гэрчлэх мэдээ материал, нийгмийн сүлжээний бүлгэмүүд цөөнгүй байна. Зарим их, дээд сургууль сургалтын хөтөлбөртөө R програмыг нэвтрүүлснээс тухайлан Монгол Улсын Их Сургууль дээр хэрэгжиж буй Статистик хөтөлбөрийг дурдаж болно. Монгол хэл дээрх ном, сурах бичиг, гарын авлагын хувьд Г.Махгал, Ш.Мөнгөнсүх нар бичиж Б.Магсаржав хянан тохиолдуулсан Статистик програмчлалын R хэл сурах бичиг хэвлэгдэн гарчээ.

## Статистикийн зүгээс онцлох зүйлс 
R, түүний сангууд олон янзын статистик болон график хэрэгсэл агуулдаг. Тухайлбал шугаман болон шугаман бус загвар, статистик шинжүүрүүд, хугацаан цувааны шинжилгээ, бүлэглэх, ангилах болон бусад олон шинжилгээ дурдаж болно. Мөн R програмын нэмэлт багцууд олон янзын функц болон бусад зүйлс агуулдаг. R хэлний стандарт функцүүдийн олонх нь R хэл дээрээ бичигдсэн бөгөөд нэмэлтээр C, C++, Fortran хэл дээрх код оруулан ажиллуулж болдог. Өндөр мэдлэг чадвартай хэрэглэгчид C, C++, Java, .NET болон Python зэрэг хэл дээр R хэлний объект уруу шууд хандаж ажиллах код бичдэг. Статистик тооцооллын бусад хэлнүүдээс ялгарах гол давуу тал бол R хэлний объект-хандалтат чанар бөгөөд энэ нь S хэлнээс түүнд дамжсэн билээ. R хэлний бас нэг онцлог lexical scoping зарчмыг хэрэгжүүлсэн явдал юм.

Түүний өөр нэг давуу тал бол математикийн тэмдэгт агуулсан, хэвлэлийн шаардлагад нийцэх график диаграм байгуулдаг явдал юм. Мөн нэмэлт багцуудын тусламжтай динамик болон интерактив график диаграм ч байгуулах боломжтой.

R програм өөрийн баримт бичиг боловсруулалтын LaTeX төст Rd гэх форматтай.

## Програмчлалын зүгээс онцлох зүйлс 
R нь шууд хөрвүүлэгдэн ажилладаг хэл бөгөөд хэрэглэгчид түүнийг командын мөрний хөрвүүлэгчээр дамжуулж ашигладаг. Хэрэв хэрэглэгч R хэлний командын мөрөнд `2+2` гэж бичээд enter дарвал компьютер доор үзүүлсэн шиг 4 гэсэн хариу өгнө:
```rout
> 2+2
[1] 4
```
R програм энэ тооцоог тус бүр нэг элементтэй хоёр векторын нийлбэр гэж ойлгох тул үр дүн нь нэг элементтэй вектор байна. `[1]` угтвар векторын эхний элемент хэвлэгдсэнийг илтгэнэ (энэ нь тооцооны үр дүн олон мөр дамнан хэвлэгдэх үед илүү ашиг тустай байдаг).

APL , MATLAB зэрэгтэй адил R хэл матриц дээрх арифметик үйлдлүүдийг дэмждэг. R-ын өгөгдлийн бүтцэд вектор, матриц, массив, датафрейм (өгөгдлийн сангийн хүснэгттэй төстэй), лист зэрэг багтдаг. Эдгээр объектуудаас гадна регрессийн загвар, хугацаан цуваа болон гео-орон зайн координат зэрэг өөр бусад төрлийн объектууд байдаг. Мөн хэрэглэгч өөрөө шинээр объектын класс тодорхойлж ашиглах боломжтой. Скаляр төрлийн өгөгдлийн хувьд энэ нь бие даасан өгөгдлийн бүтэц болдоггүй. Үүний оронд скаляр утгыг нэг урттай вектор гэж үздэг.

R нь зарим функцийн хувьд функц бүхий процедур хандалтат програмчлал болон ерөнхий функц бүхий объект хандалтат програмчлалын аль алийг дэмждэг. Ерөнхий функц нь түүний аргументаар дамжин ирсэн объектын классаас хамааран ажилладаг. Өөрөөр хэлбэл ерөнхий функц объектын классыг ялгаад улмаар харгалзах функц уруу замчилж өгдөг. Жишээлбэл `print` нэртэй ерөнхий функц ашиглан бараг бүх төрлийн объектын утгыг хэвлэх тушаалыг  `print(objectname)`  хэлбэрээр өгч болдог.

## Багц 
R програмын боломж бололцоог хэрэглэгчдийн үүсгэсэн *багц* нэмж суулгах замаар жишээлбэл мэргэжлийн статистикийн арга техник, график төхөөрөмж (тухайлбал ggplot2 багц, зохиогч нь Hadley Wickham), импорт/экспортын боломжууд, тайлан гаргах хэрэгсэл (knitr, Sweave) гэх мэтээр өргөтгөх боломжтой. Тэдгээр багцууд голдуу R заримдаа Java, C, C++, Fortran хэл дээр бичигдсэн байдаг.

R програмын суулгацад агуулагдах үндсэн багцуудаас гадна Comprehensive R Archive Network (CRAN), Bioconductor, Omegahat, GitHub болон бусад агуулахуудад (2017 оны 4 сарын байдлаар) 10500 нэмэлт багц байна.

## Гол үе шатууд 
R програмын өөрчлөлтийн түүхчилсэн жагсаалт CRAN дээр хадгалагдаж байдаг. Тэдгээрээс заримыг онцлон дор жагсаав.

## Интерфейсүүд 
Хамгийн өргөн хэрэглэгддэг R хэлний график интерфэйс бүхий хөгжүүлэлтийн цогц орчин бол RStudio юм. Үүнтэй ижил төстэй интерфэйс гэвэл R Tools for Visual Studio програмыг нэрлэж болно.

R хэлэнд зориулагдсан интерфейст мөн Crackle GUI, R Commander, RKWard багтана.

Өргөн хэрэглэгддэг зарим редактор R хэлийг дэмждэг. Тухайлбал Eclipse,
Emacs,
Кейт,
LyX.
Notepad++,
WinEdt,
Tinn-Р.

R хэлийг Python, Perl, Ruby, F# , Julia зэрэг хэд хэдэн скрипт хэлнээс хандаж ашиглах боломжтой байдаг.

## useR! хурал 
R хэрэглэгчдийн албан ёсны жил тутмын цугларалт бол  "useR!" юм.

Үүний анхны арга хэмжээ useR! 2004 2004 оны тав дугаар сард Австри улсын Вена хотноо зохион байгуулагдсан. Уг арга хэмжээ 2005 онд өнжсөнөөс хойш жил бүр Европ болон Хойд Америкт ээлжлэн зохион байгуулагдаж байна.

Дараагийн хурлуудыг дор жагсаав:
* useR! 2006, Vienna, Austria
* useR! 2007, Ames, Iowa, USA
* useR! 2008, Dortmund, Germany
* useR! 2009, Rennes, France
* useR! 2010, Gaithersburg, Maryland, USA
* useR! 2011, Coventry, United Kingdom
* useR! 2012, Nashville, Tennessee, USA
* useR! 2013, Albacete, Spain
* useR! 2014, Los Angeles, California, USA
* useR! 2015, Aalborg, Denmark
*useR! 2016, Stanford, California, USA
* useR! 2017, Brussels, Belgium
*useR! 2018, Brisbane, Australia
*useR! 2019, Toulouse, France
*useR! 2020, St. Louis, Missouri, USA

## R сэтгүүл 
*R сэтгүүл* нь R төслийн нээлттэй хандалттай, хөндлөнгийн хяналттай сэтгүүл юм. Энд R програмын хэрэглээ болон хөгжүүлэлт тухайлбал R хэлний багц, програмчлалын зөвлөмж, мэдээ зэрэг зүйлс хэвлэгддэг.

## SAS, SPSS болон Stata програмуудтай харьцуулахад 
R програмыг SAS, SPSS, Stata зэрэг өргөн тархсан статистикийн програмуудтай нарийвчлан харьцуулах нь зүйтэй. R нь статистикийн програмуудын харьцуулалт дээр статистикийн шилдэг програмуудтай хамт тэргүүн эгнээнд жагсдаг.

*New York Times* сонины 2009 оны 1 дүгээр сарын дугаарт өгөгдөл шинжээчдийн дунд R програм хүлээн зөвшөөрөгдөхийн зэрэгцээ SAS зэрэг арилжааны чанартай статистикийн програмын зах зээлд болзошгүй аюул учруулж буй талаар нийтлэл хэвлэгдсэн байдаг.

## Жишээ 
### Бичигдэх хэлбэр 
Дараах жишээнд уг хэлний бичигдэх хэлбэр болон командын мөрнөөс ажиллах байдлыг харууллаа.

R хэлэнд утга оноох оператор болох = тэмдэгтийн оронд  x  y  print(y)              # print (vector) y
[1]  1  4  9 16 25 36
> mean(y)               # Calculate average (arithmetic mean) of (vector) y; result is scalar
[1] 15.16667
> var(y)                # Calculate sample variance
[1] 178.9667
> lm_1  print(lm_1)           # Print the model from the (linear model object) lm_1

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x
     -9.333        7.000

> summary(lm_1)          # Compute and print statistics for the fit
                         # of the (linear model object) lm_1

Call:
lm(formula = y ~ x)

Residuals:
1       2       3       4       5       6
3.3333 -0.6667 -2.6667 -2.6667 -0.6667  3.3333

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  -9.3333     2.8441  -3.282 0.030453 *
x             7.0000     0.7303   9.585 0.000662 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.055 on 4 degrees of freedom
Multiple R-squared: 0.9583,	Adjusted R-squared: 0.9478
F-statistic: 91.88 on 1 and 4 DF,  p-value: 0.000662

> par(mfrow=c(2, 2))     # Request 2x2 plot layout
> plot(lm_1)             # Diagnostic plot of regression model
```

### Функцийн бүтэц 
Хэрэглэгчийн функц зохиоход хялбар байдал нь R хэлний нэг давуу тал юм. Функцийн бие доторх объект функцийн дотоод хувьсагч болохын зэрэгцээ функцийн буцаах утга өгөгдлийн аль ч төрөл хэлбэрт байж болдог. Функцийн бүтцийг харуулсан жишээг дор өгөв:
```r
functionname  sumofsquares(1:3)
[1] 14
```

### Mandelbrot олонлог 
R хэл дээрх дараах богинохон код *c* комплекс тогтмолын янз бүрийн утганд харгалзах *z* = *z*2 + *c* тэгшитгэлийн эхний 20 итерацаар Mandelbrot олонлогийг дүрслэн үзүүлнэ. Мөн энэ жишээ дараах зүйлсийг харуулна:
* энд caTools багцын хэрэглээ
* комплекс тоон дээрх үйлдэл
* тоон элементүүдээс тогтох олон хэмжээст массивын хэрэглээ (`C`, `Z` , `X`).
```r
install.packages("caTools")  # багц суулгах тушаал
library(caTools)             # write.gif функц ашиглахаар харгалзах багцыг дуудаж байна
jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan", "#7FFF7F",
                                 "yellow", "#FF7F00", "red", "#7F0000"))
dx <- 400                    # урт
dy <- 400                    # өргөн
C <- complex( real=rep(seq(-2.2, 1.0, length.out=dx), each=dy ),
              imag=rep(seq(-1.2, 1.2, length.out=dy), dx ) )
C <- matrix(C,dy,dx)         # комплекс тоонуудыг матриц хэлбэрт шилжүүлэх
Z <- 0                       # Z хувьсагчид 0 утга оноох
X <- array(0, c(dy,dx,20))   # гаралтанд ашиглах 3 хэмжээст массивыг үүсгэж байна
for (k in 1:20) {            # 20 итерац бүхий давталт
  Z <- Z^2+C                 # итерац
  X[,,k] <- exp(-abs(Z))     # үр дүнг хадгалах
}
write.gif(X, "Mandelbrot.gif", col=jet.colors, delay=900)
```

## Санал болгох бусад мэдээлэл 
* 
* 
* 
* 
*  (pbdR)
* 

## Цахим холбоос 
* R төслийн албан ёсны веб сайт
* An Introduction to R
* R books, has extensive list (with brief comments) of R-related books
* R-bloggers, a daily news site about R, with 10,000+ articles, tutorials and case-studies, contributed by over 450 R bloggers.
* The R Graphical Manual, a collection of R graphics from all R packages, and an index to all functions in all R packages
* R seek, a custom frontend to Google search engine, to assist in finding results related to the R language
* R Graph Gallery

## Ашигласан материал 
Ангилал:Статистикийн программчлалын хэл
Ангилал:Чөлөөт статистикийн программ хангамж
Ангилал:Чөлөөт тоон программ хангамж
Ангилал:GNU багц