エンタープライズ環境でRソリューションを運用する際のニュアンス

従来のレポートと運用分析の両方のRベースのソリューションは、エンタープライズ環境で非常に優れていることが証明されています。間違いなく、RStudioとその情熱的なチームがこれに重要な役割を果たしています。商用のRStudio製品では、インフラストラクチャの問題について考える必要はありませんが、「すぐに使える」既製のソリューションと少しのお金を交換し、開発者とサポートに頼るだけです。オープンソース版では、ロシア企業のほとんどのインストールはそのようなものであり、インフラストラクチャの問題について自分で考える必要があります。





Rソリューションは、Excelまたは未構成のリレーショナルシステムに収まるよりも「少し多い」データがあり、複雑なアルゴリズムと処理が必要であるが、「起動」を展開するにはまだ時期尚早である場合、「平均データ」のニッチを十分に閉じます。ビッグデートの複雑な」、私たちのタスクはまだ地球の軌道内にあります。完全に数十から数百テラバイトについて話しているのでClikhouseのバックエンドに簡単に収まります。重要な点:すべてが内部回路にあり、圧倒的多数の場合、インターネットから完全に遮断されています。





以前の一連の出版物を継続し、堅牢なエンタープライズRアプリケーションのビルディングブロックを改良します





問題がある

生産的なソリューションを実現するには、再現性のある結果と計算を保証する必要があります。再現性の問題はいくつかの異なる方向に分けられます。大きなブロックは区別できます。





  • インフラストラクチャの再現性。多くの質問は、docker + renv + gitテクノロジーの組み合わせで閉じられます。





  • ソフトウェアの再現性。多くの質問は、パッケージと自動テストのテクノロジーによって閉じられます。





  • 結果の統計的「類似性」。ここで、個々のタスクの特異性が生じます。それを確実にするために、いくつかのポイントが以下に提案されています。





難しさは何ですか?





「本番環境に展開された」アルゴリズム





  • 累積計算時間が数時間の多相になる可能性があります。





  • «» ( , excel , ..);





  • , ;





  • ;





  • .





  • , ;





  • , . .





( ) , . , . , prod (), dev .





, . , , . , . . , (availability) X% $Y. .









  • . , .





  • , .





  • . .





  • .





  • data.frame



    , «» , .





, :





  • futile.logger





  • lgr





  • logger





warning



message



, . , .





, .Rds



(1-1000 Ram) . 3 :





  • fst





  • qs





  • arrow





-- . , , .. .





:





  • checkmate -- + ;





  • skimr -- ;





  • validate -- ;





  • testthat / tinytest -- ;





  • dplyr / data.table -- .





, . Win-Vector.





pipe (%>%



). . - ( «» « », ), . , , .



.





:





  • tidylog. , tidylog



    tidyverse



    , dpylr::mutate



    .





  • lumberjack.





, :





  • «Debugging with RStudio by Jonathan McPherson»





  • «Advanced R», . «Debugging»





(shiny )?





  • browser()



    . IDE. . -- . .





  • debug()



    /undebug()



    /debugonce()



    . , .., .





  • traceback()



    . .





  • options(datatable.verbose = TRUE)



    . data.table



    ( , , ).





  • utils::getFromNamespace



    . .





  • waldo diffobj. .





  • 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)
      
      



. ( ) , .





  • bench





  • microbenchmark





  • system.time({…})







  • profvis





  • proffer





  1. .

    ? . , , .





  2. make



     . drake/targets





  3. 実際の問題では、あらゆる種類の驚きがあります。ビッグデータの魔法が常に役立つとは限りません。皮肉な探偵「AWKとRを使用して25TBを解析する」を読みます





以前の出版物- 「企業でRを使用してプロセスマイニングを飼いならす方法は?」..。








All Articles