R in production
Антон Антонов
@tonytonov
![](https://s3.amazonaws.com/media-p.slid.es/uploads/514850/images/2639778/rlogo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/514850/images/2639851/rprog-logo.png)
vk.com/spbrug
stepic.org/course/497
Зачем вообще нужен R
- Для задач, связанных с анализом данных
- Для численных методов
- Для визуализации
- Для быстрого прототипирования
- Task views: https://cran.r-project.org/web/views/
Зачем вообще нужен R
Use case: некий численный алгоритм
(в моём проекте)
numeric input -- numeric output
Gramacy, R.B., Lee JH. (2007). On estimating covariances between many assets with histories of highly variable length. arXiv:0710.5837
install.packages("monomvn")
library(monomvn)
Если от R можно отказаться,
то это стоит сделать!
- Продакшен (написание "приложений") не является нишей R
- R -- довольно медленный язык
- R непросто параллелить
- Весь код открыт, можно смотреть исходники
- У пакетов могут быть тяжелые зависимости
Depends: R (>= 2.14.0), pls, lars, MASS
Imports: quadprog, mvtnorm
monomvn(y, pre = TRUE, method = c("plsr", "pcr", "lasso", "lar",
"forward.stagewise", "stepwise", "ridge", "factor"), p = 0.9,
ncomp.max = Inf, batch = TRUE, validation = c("CV", "LOO", "Cp"),
obs = FALSE, verb = 0, quiet = TRUE)
R на сервере
- В целом, всё хорошо
- Полный контроль окружения (версионность, настройки, репозитории)
- Package management
- Rocker (R + Docker)
https://hub.docker.com/u/rocker/
![](https://s3.amazonaws.com/media-p.slid.es/uploads/514850/images/2864570/2vA1a.png)
R на клиенте
- В целом, всё плохо
- Нужна локальная установка
- Нужно как-то деплоить код
- Можно ожидать сложностей с windows...
Что делать?
- Не паникуйте
- Попробуйте завести сервер
- Пишите пакеты, а не скрипты
- Системы контроля версий
- Dependencies
- Unit tests + continuous integration
- Документация
Полезная идея
Например, для C# есть R.NET
REngine engine = REngine.GetInstance();
NumericVector group2 = engine.Evaluate("rnorm(10)").AsNumeric();
Для некоторых языков есть расширения, поддерживающие обращение к R
Полезная идея #2
Репозиторий в локальной сети
> library(miniCRAN)
> pkgList <- pkgDep("monomvn", type="source", suggests = FALSE)
> pkgList
[1] "monomvn" "pls" "lars" "MASS" "quadprog" "mvtnorm"
> makeRepo(pkgList, path=pth, type=c("source", "win.binary"))
- Все пакеты в одном месте (в т.ч. свои)
- Нет зависимости от интернета
Полезная идея #3
Shiny: "A web application framework for R"
- Серверная часть может содержать любой R код
- Можно делать наглядные интерактивные визуализации
Summary
- По возможности не используйте R в продакшене
- В особенности на клиенте
- Впрочем, всё возможно
- Особенно если разрабатывать пакеты
- И это не отменяет того, что R -- отличный язык
Спасибо!
R in production
By Antonov Anton
R in production
The talk I gave at ITGM #8, St. Petersburg IT Global Meetup (23.07.2016).
- 992