As soluções baseadas em R, tanto de relatórios clássicos quanto de análises operacionais, têm se mostrado muito bem em um ambiente corporativo. Sem dúvida, RStudio e sua equipe apaixonada desempenham um papel significativo nisso . Em produtos comerciais RStudio, você não precisa pensar em questões de infraestrutura, mas simplesmente trocar um pouco de dinheiro por uma solução pronta "fora da caixa" e contar com seus desenvolvedores e suporte. Em edições de código aberto, e a maioria das instalações em empresas russas são assim, você precisa pensar sobre os problemas de infraestrutura por conta própria.
As soluções R fecham bem o nicho de "dados médios", quando há "um pouco mais" de dados do que cabe no Excel ou um sistema relacional não configurado e algoritmos e processamento complexos são necessários, mas quando ainda é muito cedo para implantar o "lançamento complexo "de datas importantes, nossas tarefas ainda estão dentro da órbita da Terra. Estamos falando de dezenas a centenas de terabytes completos, que podem caber facilmente no back-end do Clikhouse . Um ponto importante: tudo está em um circuito interno, na grande maioria dos casos, TOTALMENTE desligado da Internet.
Dando continuidade a uma série de publicações anteriores , refina os blocos de construção para uma robusta Empresa R Aplicação .
Problemático
Para uma solução produtiva, você precisa garantir resultados e cálculos reproduzíveis. O problema da reprodutibilidade está dividido em várias direções diferentes. Grandes blocos podem ser distinguidos:
reprodutibilidade infraestrutural. Muitas questões são fechadas com uma combinação de tecnologias docker + renv + git.
reprodutibilidade do software. Muitas questões são fechadas pela tecnologia de pacotes e autotestes.
"similaridade" estatística dos resultados. É aqui que surge a especificidade de cada tarefa individual. Alguns pontos são sugeridos abaixo para garantir isso.
Qual é a dificuldade?
Algoritmos "lançados em produção"
pode ser multifásico com um tempo de cálculo cumulativo de várias horas;
«» ( , excel , ..);
, ;
;
.
, ;
, . .
( ) , . , . , prod (), dev .
, . , , . , . . , (availability) X% $Y. .
. , .
, .
. .
.
data.frame
, «» , .
, :
warning
message
, . , .
, .Rds
(1-1000 Ram) . 3 :
-- . , , .. .
:
, . Win-Vector.
pipe (%>%
). . - ( «» « », ), . , , .
.
:
tidylog. ,
tidylog
tidyverse
,dpylr::mutate
.
-
, :
«Debugging with RStudio by Jonathan McPherson»
«Advanced R», . «Debugging»
(shiny )?
browser()
. IDE. . -- . .
debug()
/undebug()
/debugonce()
. , .., .
traceback()
. .
options(datatable.verbose = TRUE)
.data.table
( , , ).
utils::getFromNamespace
. .
-
pryr::object_size()
. «» .
reprex
. .
gginnards
. ggplot.
browser()
, data.table
.
library(data.table)
library(magrittr)
dt <- as.data.table(mtcars) %>%
.[, {m <- head(.SD, 2); print(ls()); browser(); m}, by = gear]
#> [1] "-.POSIXt" "am" "carb" "Cfastmean" "cyl" "disp"
#> [7] "drat" "gear" "hp" "m" "mpg" "print"
#> [13] "qsec" "strptime" "vs" "wt"
#> Called from: `[.data.table`(., , {
#> m <- head(.SD, 2)
#> print(ls())
#> browser()
#> m
#> }, by = gear)
. ( ) , .
-
-
system.time({…})
-
-
.
? . , , .
-
Em problemas práticos, pode haver todo tipo de surpresas, a magia dos bigdata nem sempre ajuda, lemos o irônico detetive "Usando AWK e R para analisar 25 TB"
Publicação anterior - "Como domesticar a mineração de processos com R em uma empresa?" ...