galaaz 0.5.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +46 -0
- data/LICENSE +0 -0
- data/README.md +1416 -667
- data/Rakefile +68 -41
- data/bin/galaaz-bootstrap +137 -0
- data/bin/galaaz-jruby +11 -0
- data/bin/galaaz-ruby +16 -0
- data/bin/galaaz_jruby_env.inc.sh +6 -0
- data/bin/galaaz_ruby_env.inc.sh +36 -0
- data/bin/gbookdown +63 -0
- data/bin/gknit +83 -13
- data/bin/gknit-draft.rb +0 -0
- data/bin/gstudio +5 -3
- data/bin/gstudio_irb.rb +0 -0
- data/bin/gstudio_pry.rb +0 -0
- data/bin/install-tinytex +6 -0
- data/bin/run_all_rspec +44 -0
- data/bin/run_example +17 -0
- data/bin/run_old_rspec +20 -0
- data/bin/run_rspec +24 -0
- data/bin/run_rspec_subset +38 -0
- data/bin/run_slow_rspec +20 -0
- data/blogs/R-on-Rails-Planning-Document.md +940 -0
- data/blogs/README.md +100 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot.Rmd +38 -66
- data/blogs/galaaz_ggplot/galaaz_ggplot.log +754 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot.md +115 -155
- data/blogs/galaaz_ggplot/galaaz_ggplot.tex +607 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-gfm/midwest_rb.png +0 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-gfm/scatter_plot_rb.png +0 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-html/midwest_rb.png +0 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-html/scatter_plot_rb.png +0 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-markdown_github/midwest_rb.png +0 -0
- data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-markdown_github/scatter_plot_rb.png +0 -0
- data/blogs/galaaz_ggplot/midwest.Rmd +3 -3
- data/blogs/galaaz_ggplot/midwest_external_png +0 -0
- data/blogs/gknit/gknit.Rmd +47 -52
- data/blogs/gknit/gknit.md +1430 -0
- data/blogs/gknit/gknit_files/figure-gfm/bubble-1.png +0 -0
- data/blogs/gknit/gknit_files/figure-gfm/diverging_bar.png +0 -0
- data/blogs/gknit/gknit_files/figure-html/bubble-1.png +0 -0
- data/blogs/gknit/gknit_files/figure-html/diverging_bar.png +0 -0
- data/blogs/gknit/lst.rds +0 -0
- data/blogs/gknit/model.rb +1 -1
- data/blogs/gknit/stats.bib +0 -0
- data/blogs/manual/include_model_local_repro.Rmd +14 -0
- data/blogs/manual/include_model_local_repro.md +75 -0
- data/blogs/manual/lst.rds +0 -0
- data/blogs/manual/manual.Rmd +855 -239
- data/blogs/manual/manual.log +1786 -0
- data/blogs/manual/manual.md +1416 -667
- data/blogs/manual/manual.tex +1883 -1161
- data/blogs/manual/manual_files/figure-html/bubble-1.png +0 -0
- data/blogs/manual/manual_files/figure-html/diverging_bar.png +0 -0
- data/blogs/manual/manual_files/figure-latex/bubble-1.png +0 -0
- data/blogs/manual/model.rb +1 -1
- data/blogs/nse_dplyr/nse_dplyr.Rmd +84 -111
- data/blogs/nse_dplyr/nse_dplyr.log +928 -0
- data/blogs/nse_dplyr/nse_dplyr.md +198 -229
- data/blogs/oh_my/not_so.rb +0 -0
- data/blogs/oh_my/oh_my.Rmd +1234 -25
- data/blogs/oh_my/oh_my.log +804 -0
- data/blogs/oh_my/oh_my.md +1663 -86
- data/blogs/oh_my/oh_my.tex +821 -0
- data/blogs/oh_my/old.Rmd +15 -14
- data/blogs/ruby_plot/ruby_plot.Rmd +58 -82
- data/blogs/ruby_plot/ruby_plot.log +885 -0
- data/blogs/ruby_plot/ruby_plot.md +71 -102
- data/blogs/ruby_plot/ruby_plot.tex +940 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/dose_len.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/facet_by_delivery.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/facet_by_dose.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/facets_by_delivery_color.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/facets_by_delivery_color2.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/facets_with_decorations.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/facets_with_jitter.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/facets_with_points.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/final_box_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/final_violin_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-gfm/violin_with_jitter.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/dose_len.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facet_by_delivery.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facet_by_dose.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_by_delivery_color.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_by_delivery_color2.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_decorations.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_jitter.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_points.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/final_box_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/final_violin_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-html/violin_with_jitter.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/dose_len.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facet_by_delivery.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facet_by_dose.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_by_delivery_color.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_by_delivery_color2.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_decorations.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_jitter.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_points.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/final_box_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/final_violin_plot.png +0 -0
- data/blogs/ruby_plot/ruby_plot_files/figure-latex/violin_with_jitter.png +0 -0
- data/blogs/test/test.Rmd +14 -0
- data/blogs/test/test.md +10 -0
- data/examples/50Plots_MasterList/Images/midwest-scatterplot.PNG +0 -0
- data/examples/50Plots_MasterList/ScatterPlot.rb +2 -1
- data/examples/50Plots_MasterList/scatter_plot.rb +1 -0
- data/examples/Bibliography/master.bib +0 -0
- data/examples/Bibliography/stats.bib +0 -0
- data/examples/R/calc.R +0 -0
- data/examples/R/java_interop.R +0 -0
- data/examples/bioconductor_deseq2_airway/Documentation/DESeq2-airway-walkthrough.md +56 -0
- data/examples/bioconductor_deseq2_airway/bench_galaaz_three_same_process.rb +54 -0
- data/examples/bioconductor_deseq2_airway/bench_r_three_same_process.R +34 -0
- data/examples/bioconductor_deseq2_airway/deseq2_airway_galaaz.rb +34 -0
- data/examples/bioconductor_deseq2_airway/deseq2_airway_galaaz_optimized.rb +35 -0
- data/examples/bioconductor_deseq2_airway/deseq2_airway_minimal.R +30 -0
- data/examples/bioconductor_deseq2_airway/deseq2_airway_pipeline_for_bench.R +36 -0
- data/examples/islr/all.rb +14 -0
- data/examples/islr/ch2.spec.rb +38 -7
- data/examples/islr/ch3.spec.rb +12 -2
- data/examples/islr/ch3_boston.rb +28 -0
- data/examples/islr/ch3_multiple_regression.rb +1 -0
- data/examples/islr/ch6.spec.rb +25 -1
- data/examples/islr/x_y_rnorm.jpg +0 -0
- data/examples/latex_templates/Test-acm_article/acm_proc_article-sp.cls +0 -0
- data/examples/latex_templates/Test-acm_article/sigproc.bib +0 -0
- data/examples/latex_templates/Test-acs_article/acs-Test-acs_article.bib +0 -0
- data/examples/latex_templates/Test-acs_article/acs-my_output.bib +0 -0
- data/examples/latex_templates/Test-aea_article/BibFile.bib +0 -0
- data/examples/latex_templates/Test-aea_article/Test-aea_article.Rmd +0 -0
- data/examples/latex_templates/Test-aea_article/references.bib +0 -0
- data/examples/latex_templates/Test-amq_article/Test-amq_article.Rmd +0 -0
- data/examples/latex_templates/Test-amq_article/Test-amq_article.pdfsync +0 -0
- data/examples/latex_templates/Test-ieee_article/IEEEtran.bst +0 -0
- data/examples/latex_templates/Test-ieee_article/mybibfile.bib +0 -0
- data/examples/latex_templates/Test-rjournal_article/RJournal.sty +0 -0
- data/examples/latex_templates/Test-rjournal_article/RJreferences.bib +0 -0
- data/examples/latex_templates/Test-rjournal_article/Test-rjournal_article.Rmd +0 -0
- data/examples/misc/baseball.csv +0 -0
- data/examples/misc/ggplot.rb +5 -3
- data/examples/misc/moneyball.rb +1 -0
- data/examples/misc/subsetting.rb +1 -0
- data/examples/multithread_shards_to_r/shards_to_r.rb +68 -0
- data/examples/rmarkdown/svm-rmarkdown-anon-ms-example/svm-rmarkdown-anon-ms-example.Rmd +0 -0
- data/examples/rmarkdown/svm-rmarkdown-article-example/svm-rmarkdown-article-example.Rmd +0 -0
- data/examples/rmarkdown/svm-rmarkdown-beamer-example/svm-rmarkdown-beamer-example.Rmd +0 -0
- data/examples/rmarkdown/svm-rmarkdown-cv/svm-rmarkdown-cv.Rmd +0 -0
- data/examples/rmarkdown/svm-rmarkdown-syllabus-example/attend-grade-relationships.csv +0 -0
- data/examples/rmarkdown/svm-rmarkdown-syllabus-example/svm-rmarkdown-syllabus-example.Rmd +0 -0
- data/examples/rmarkdown/svm-xaringan-example/svm-xaringan-example.Rmd +0 -0
- data/examples/sthda_ggplot/README.md +0 -0
- data/examples/sthda_ggplot/RUN.md +41 -0
- data/examples/sthda_ggplot/all.rb +1 -0
- data/examples/sthda_ggplot/one_variable_continuous/density_gg.rb +1 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_area.rb +1 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_density.rb +3 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_dotplot.rb +1 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_freqpoly.rb +1 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_histogram.rb +1 -0
- data/examples/sthda_ggplot/one_variable_continuous/histogram_density.rb +1 -0
- data/examples/sthda_ggplot/one_variable_continuous/stat.rb +1 -0
- data/examples/sthda_ggplot/one_variable_discrete/bar.rb +1 -0
- data/examples/sthda_ggplot/qplots/box_violin_dot.rb +1 -0
- data/examples/sthda_ggplot/qplots/scatter_plots.rb +1 -0
- data/examples/sthda_ggplot/scatter_gg.rb +1 -0
- data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_bin2d.rb +1 -0
- data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_density2d.rb +1 -0
- data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_hex.rb +1 -0
- data/examples/sthda_ggplot/two_variables_cont_cont/geom_point.rb +1 -0
- data/examples/sthda_ggplot/two_variables_cont_cont/geom_smooth.rb +1 -0
- data/examples/sthda_ggplot/two_variables_cont_cont/misc.rb +1 -0
- data/examples/sthda_ggplot/two_variables_cont_function/geom_area.rb +5 -3
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_bar.rb +1 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_boxplot.rb +1 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_dotplot.rb +1 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_jitter.rb +1 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_line.rb +1 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_violin.rb +1 -0
- data/examples/sthda_ggplot/two_variables_disc_disc/geom_jitter.rb +1 -0
- data/examples/sthda_ggplot/two_variables_error/geom_crossbar.rb +1 -0
- data/ext/new_bridge/Makefile +46 -0
- data/ext/new_bridge/galaaz_gatekeeper_phase0.cpp +12 -0
- data/ext/new_bridge/galaaz_gatekeeper_phase1.cpp +1639 -0
- data/lib/R_interface/galaaz_device.R +20 -0
- data/lib/R_interface/include_engine.R +109 -0
- data/lib/R_interface/new_bridge_adapter.rb +824 -0
- data/lib/R_interface/r.rb +177 -25
- data/lib/R_interface/r_arrow.rb +113 -0
- data/lib/R_interface/r_libs.R +3 -3
- data/lib/R_interface/r_methods.rb +13 -126
- data/lib/R_interface/r_module_s.rb +0 -0
- data/lib/R_interface/rbinary_operators.rb +20 -2
- data/lib/R_interface/rclosure.rb +5 -1
- data/lib/R_interface/rdata_frame.rb +34 -70
- data/lib/R_interface/rdevice.rb +125 -0
- data/lib/R_interface/rdevices.R +0 -0
- data/lib/R_interface/renvironment.rb +10 -4
- data/lib/R_interface/rexpression.rb +5 -1
- data/lib/R_interface/rindexed_object.rb +41 -13
- data/lib/R_interface/rlanguage.rb +20 -62
- data/lib/R_interface/rlist.rb +115 -25
- data/lib/R_interface/rlogical_operators.rb +0 -0
- data/lib/R_interface/rmatrix.rb +2 -11
- data/lib/R_interface/rmd_indexed_object.rb +5 -1
- data/lib/R_interface/robject.rb +348 -290
- data/lib/R_interface/rpkg.rb +0 -0
- data/lib/R_interface/rsupport.rb +609 -328
- data/lib/R_interface/rsupport_scope.rb +2 -1
- data/lib/R_interface/rsymbol.rb +50 -0
- data/lib/R_interface/ruby_callback.rb +2 -3
- data/lib/R_interface/ruby_extensions.rb +225 -175
- data/lib/R_interface/runary_operators.rb +0 -0
- data/lib/R_interface/rvector.rb +162 -31
- data/lib/galaaz.rb +0 -0
- data/lib/galaaz_jruby.rb +22 -0
- data/lib/galaaz_ruby.rb +34 -0
- data/lib/gknit/diagnostics.rb +50 -0
- data/lib/gknit/draft.rb +23 -17
- data/lib/gknit/include_engine.rb +15 -7
- data/lib/gknit/knitr_engine.rb +223 -74
- data/lib/gknit/rb_engine.rb +3 -3
- data/lib/gknit/ruby_engine.rb +0 -0
- data/lib/gknit.rb +1 -0
- data/lib/new_bridge/bootstrap/windows_bootstrap.rb +285 -0
- data/lib/new_bridge/envelope.rb +51 -0
- data/lib/new_bridge/eval_result.rb +26 -0
- data/lib/new_bridge/framing.rb +39 -0
- data/lib/new_bridge/instance_pool_client.rb +38 -0
- data/lib/new_bridge/r_instance_manager.rb +404 -0
- data/lib/new_bridge/session_client.rb +530 -0
- data/lib/new_bridge/tcp_framed.rb +44 -0
- data/lib/new_bridge.rb +9 -0
- data/lib/util/exec_ruby.rb +95 -20
- data/lib/util/inline_file.rb +35 -30
- data/new_bridge_specs/benchmark_phase5_5_unboxing_spec.rb +96 -0
- data/new_bridge_specs/eval_r_async_spec.rb +113 -0
- data/new_bridge_specs/integration_phase5_1_concurrent_spec.rb +50 -0
- data/new_bridge_specs/integration_phase5_1_eval_spec.rb +16 -0
- data/new_bridge_specs/integration_phase5_1_r_api_spec.rb +25 -0
- data/new_bridge_specs/integration_phase5_1_smoke_spec.rb +31 -0
- data/new_bridge_specs/integration_phase5_2_dataframe_unboxing_spec.rb +19 -0
- data/new_bridge_specs/integration_phase5_2_handle_eval_unboxing_spec.rb +25 -0
- data/new_bridge_specs/integration_phase5_3_callback_args_spec.rb +28 -0
- data/new_bridge_specs/integration_phase5_3_callback_error_spec.rb +22 -0
- data/new_bridge_specs/integration_phase5_3_callback_timeout_spec.rb +28 -0
- data/new_bridge_specs/integration_phase5_3_callbacks_smoke_spec.rb +22 -0
- data/new_bridge_specs/integration_phase5_3_edge_cases_spec.rb +52 -0
- data/new_bridge_specs/integration_phase5_3_nested_spec.rb +30 -0
- data/new_bridge_specs/integration_phase5_4_concurrent_sessions_spec.rb +53 -0
- data/new_bridge_specs/integration_phase5_4_nested_session_callbacks_spec.rb +49 -0
- data/new_bridge_specs/integration_phase5_4_session_routing_spec.rb +38 -0
- data/new_bridge_specs/integration_phase5_5_stress_concurrency_spec.rb +52 -0
- data/new_bridge_specs/integration_phase5_5_unbox_walk_spec.rb +46 -0
- data/new_bridge_specs/phase0_protocol_spec.rb +96 -0
- data/new_bridge_specs/phase1_req_ret_spec.rb +66 -0
- data/new_bridge_specs/phase2_multi_instance_spec.rb +67 -0
- data/new_bridge_specs/phase3_callbacks_spec.rb +71 -0
- data/new_bridge_specs/phase4_2_hardening_spec.rb +252 -0
- data/new_bridge_specs/phase4_3_r_instance_manager_spec.rb +85 -0
- data/new_bridge_specs/phase4_nested_callbacks_spec.rb +123 -0
- data/r_requires/ggplot.rb +0 -0
- data/r_requires/knitr.rb +0 -0
- data/specs/all.rb +15 -11
- data/specs/arrow_from_ruby_batches_spec.rb +50 -0
- data/specs/arrow_semantics_spec.rb +64 -0
- data/specs/bridge_concurrent_spec.rb +46 -0
- data/specs/bridge_nested_spec.rb +25 -0
- data/specs/dataframe_semantics_spec.rb +122 -0
- data/specs/dataframe_single_index_logical_filter_spec.rb +21 -0
- data/specs/dispatch_probe_cache_spec.rb +38 -0
- data/specs/dispatch_probe_error_class_fallback_spec.rb +20 -0
- data/specs/dispatch_probe_fallback_spec.rb +18 -0
- data/specs/environment_semantics_spec.rb +89 -0
- data/specs/field_access_spec.rb +31 -0
- data/specs/figures/bg.jpeg +0 -0
- data/specs/figures/bg.png +0 -0
- data/specs/figures/bg.svg +168 -57
- data/specs/figures/dose_len.png +0 -0
- data/specs/figures/no_args.jpeg +0 -0
- data/specs/figures/no_args.png +0 -0
- data/specs/figures/no_args.svg +168 -57
- data/specs/figures/width_height.jpeg +0 -0
- data/specs/figures/width_height.png +0 -0
- data/specs/figures/width_height_units1.jpeg +0 -0
- data/specs/figures/width_height_units1.png +0 -0
- data/specs/figures/width_height_units2.jpeg +0 -0
- data/specs/figures/width_height_units2.png +0 -0
- data/specs/formula_semantics_spec.rb +81 -0
- data/specs/galaaz_util_exec_ruby_spec.rb +85 -0
- data/specs/galaaz_util_inline_file_spec.rb +54 -0
- data/specs/gknit_cli_option_permutation_spec.rb +24 -0
- data/specs/gknit_include_engine_spec.rb +72 -0
- data/specs/gknit_install_timeout_report_spec.rb +69 -0
- data/specs/gknit_internal_error_report_spec.rb +57 -0
- data/specs/gknit_vector_map_output_spec.rb +59 -0
- data/specs/globalenv_guardrail_spec.rb +52 -0
- data/specs/language_expression_semantics_spec.rb +145 -0
- data/specs/list_semantics_spec.rb +111 -0
- data/specs/new_bridge_bulk_dataframe_transfer_spec.rb +44 -0
- data/specs/new_bridge_bulk_vector_transfer_spec.rb +73 -0
- data/specs/new_bridge_callback_timeout_spec.rb +69 -0
- data/specs/new_bridge_eval_r_fallback_spec.rb +55 -0
- data/specs/nil_null_spec.rb +42 -0
- data/specs/object_build_phase2_spec.rb +53 -0
- data/specs/phase1_callback_bridge_spec.rb +84 -0
- data/specs/phase2_gknit_generic_rendering_guardrail_spec.rb +46 -0
- data/specs/phase2_gknit_no_raw_code_leakage_spec.rb +43 -0
- data/specs/phase3_gknit_generic_graphics_capture_spec.rb +71 -0
- data/specs/plot_device_semantics_spec.rb +28 -0
- data/specs/plot_snapshot_semantics_spec.rb +58 -0
- data/specs/protocol_result_spec.rb +236 -0
- data/specs/r_batch_fail_fast_spec.rb +47 -0
- data/specs/r_bridge_bootstrap_spec.rb +11 -0
- data/specs/r_devices.spec.rb +1 -1
- data/specs/r_eval.spec.rb +16 -18
- data/specs/r_function.spec.rb +1 -1
- data/specs/r_instance_manager_spec.rb +285 -0
- data/specs/r_list_apply.spec.rb +15 -15
- data/specs/r_matrix.spec.rb +0 -0
- data/specs/r_nse.spec.rb +5 -5
- data/specs/r_object_send_dispatch_spec.rb +13 -0
- data/specs/r_vector_comparator_spec.rb +8 -0
- data/specs/r_vector_creation.spec.rb +0 -0
- data/specs/r_vector_functions.spec.rb +0 -0
- data/specs/r_vector_object.spec.rb +0 -0
- data/specs/r_vector_operators.spec.rb +0 -0
- data/specs/r_vector_structured_scalar_reads_spec.rb +35 -0
- data/specs/r_vector_subsetting.spec.rb +0 -0
- data/specs/range_helper_spec.rb +21 -0
- data/specs/rsupport_scope_spec.rb +28 -0
- data/specs/rsupport_var_name_thread_safety_spec.rb +24 -0
- data/specs/scalar_character_spec.rb +44 -0
- data/specs/scoped_symbol_dsl_refinement_spec.rb +40 -0
- data/specs/session_env_bridge_spec.rb +25 -0
- data/specs/simplecov_bootstrap_spec.rb +10 -0
- data/specs/spec_helper.rb +10 -0
- data/specs/tmp.rb +0 -0
- data/specs/unboxing_recursion_regression_spec.rb +30 -0
- data/specs/unboxing_spec.rb +49 -0
- data/specs/verify_callbacks.rb +42 -0
- data/sty/galaaz.sty +0 -0
- data/version.rb +1 -1
- metadata +219 -63
- data/blogs/galaaz_ggplot/galaaz_ggplot.html +0 -520
- data/blogs/galaaz_ggplot/galaaz_ggplot.pdf +0 -0
- data/blogs/galaaz_ggplot/midwest.html +0 -188
- data/blogs/gknit/gknit.html +0 -2266
- data/blogs/gknit/gknit.pdf +0 -0
- data/blogs/manual/manual.html +0 -4638
- data/blogs/manual/manual.pdf +0 -0
- data/blogs/manual/manual_files/figure-latex/diverging_bar.pdf +0 -0
- data/blogs/nse_dplyr/nse_dplyr.html +0 -878
- data/blogs/nse_dplyr/nse_dplyr.pdf +0 -0
- data/blogs/oh_my/oh_my.html +0 -568
- data/blogs/ruby_plot/ruby_plot.html +0 -544
- data/blogs/ruby_plot/ruby_plot.pdf +0 -0
- data/examples/latex_templates/Test-acs_article/Test-acs_article.pdf +0 -0
- data/examples/latex_templates/Test-aea_article/Test-aea_article.pdf +0 -0
- data/examples/latex_templates/Test-amq_article/Test-amq_article.pdf +0 -0
- data/examples/latex_templates/Test-amq_article/pics/Figure2.pdf +0 -0
- data/examples/latex_templates/Test-asa_article/Test-asa_article.pdf +0 -0
- data/examples/latex_templates/Test-ieee_article/Test-ieee_article.pdf +0 -0
- data/examples/latex_templates/Test-rjournal_article/RJwrapper.pdf +0 -0
- data/examples/latex_templates/Test-springer_article/Test-springer_article.pdf +0 -0
- data/examples/rmarkdown/svm-rmarkdown-anon-ms-example/svm-rmarkdown-anon-ms-example.pdf +0 -0
- data/examples/rmarkdown/svm-rmarkdown-article-example/svm-rmarkdown-article-example.pdf +0 -0
- data/examples/rmarkdown/svm-rmarkdown-beamer-example/svm-rmarkdown-beamer-example.pdf +0 -0
- data/examples/rmarkdown/svm-rmarkdown-cv/svm-rmarkdown-cv.pdf +0 -0
- data/examples/rmarkdown/svm-rmarkdown-syllabus-example/svm-rmarkdown-syllabus-example.pdf +0 -0
- data/specs/r_dataframe.spec.rb +0 -379
- data/specs/r_environment.spec.rb +0 -140
- data/specs/r_formula.spec.rb +0 -232
- data/specs/r_language.spec.rb +0 -112
- data/specs/r_list.spec.rb +0 -293
- data/specs/r_plots.spec.rb +0 -72
- data/specs/ruby_expression.spec.rb +0 -316
data/blogs/gknit/gknit.Rmd
CHANGED
|
@@ -3,8 +3,8 @@ title: "How to do reproducible research in Ruby with gKnit"
|
|
|
3
3
|
author:
|
|
4
4
|
- "Rodrigo Botafogo"
|
|
5
5
|
- "Daniel Mossé - University of Pittsburgh"
|
|
6
|
-
tags: [Tech, Data Science, Ruby, R,
|
|
7
|
-
date: "29/04/2019"
|
|
6
|
+
tags: [Tech, Data Science, Ruby, R, JRuby, "GNU R", Galaaz, gKnit, knitr]
|
|
7
|
+
date: "29/04/2019 (narrative updated for Galaaz 2.0, 2026)"
|
|
8
8
|
bibliography: stats.bib
|
|
9
9
|
output:
|
|
10
10
|
pdf_document:
|
|
@@ -40,7 +40,7 @@ single document or set of documents that when distributed to peers could be reru
|
|
|
40
40
|
the same output and reports.
|
|
41
41
|
|
|
42
42
|
The R community has put a great deal of effort in reproducible research. In 2002, Sweave was
|
|
43
|
-
introduced and it allowed mixing R code with
|
|
43
|
+
introduced and it allowed mixing R code with LaTeX, generating high-quality PDF documents. A
|
|
44
44
|
Sweave document could include code, the results of executing the code, graphics and text
|
|
45
45
|
such that it contained the whole narrative to reproduce the research. In
|
|
46
46
|
2012, Knitr, developed by Yihui Xie from RStudio was released to replace Sweave and to
|
|
@@ -49,7 +49,7 @@ were necessary for Sweave.
|
|
|
49
49
|
|
|
50
50
|
With Knitr, __R markdown__ was also developed, an extension to the
|
|
51
51
|
Markdown format. With __R markdown__ and Knitr it is possible to generate reports in a multitude
|
|
52
|
-
of formats such as HTML,
|
|
52
|
+
of formats such as HTML, Markdown, LaTeX, PDF, DVI, etc. __R markdown__ also allows the use of
|
|
53
53
|
multiple programming languages such as R, Ruby, Python, etc. in the same document.
|
|
54
54
|
|
|
55
55
|
In __R markdown__, text is interspersed with
|
|
@@ -96,8 +96,8 @@ puts lst
|
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
In the Python community, the same effort to have code and text in an integrated environment
|
|
99
|
-
started around the first decade of
|
|
100
|
-
Fernando Pérez
|
|
99
|
+
started around the first decade of the 2000s. In 2006 IPython 0.7.2 was released. In 2014,
|
|
100
|
+
Fernando Pérez spun off the Jupyter project from IPython, creating a web-based interactive
|
|
101
101
|
computation environment. Jupyter can now be used with many languages, including Ruby with the
|
|
102
102
|
iruby gem (https://github.com/SciRuby/iruby). In order to have multiple languages in a Jupyter
|
|
103
103
|
notebook the SoS kernel was developed (https://vatlab.github.io/sos-docs/).
|
|
@@ -109,15 +109,14 @@ written both in Ruby and/or R and output it in any of the available formats of _
|
|
|
109
109
|
allows ruby developers to do literate programming and reproducible research by allowing them to
|
|
110
110
|
have in a single document, text and code.
|
|
111
111
|
|
|
112
|
-
gKnit runs
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
with Ruby and R is quite natural.
|
|
112
|
+
gKnit runs with **JRuby**, **GNU R**, and **Galaaz** (the integration layer between Ruby and R—see below).
|
|
113
|
+
Knitr and **R Markdown** orchestrate the document; Galaaz’s engine keeps **Ruby state across chunks**
|
|
114
|
+
and talks to R through the **bridge**. Ruby chunks can read and update R variables (`~R[:name]`, `R.*`)
|
|
115
|
+
without GraalVM-style polyglot interop.
|
|
117
116
|
|
|
118
117
|
Galaaz has already been describe in the following posts:
|
|
119
118
|
|
|
120
|
-
* https://towardsdatascience.com/ruby-plotting-with-galaaz-an-example-of-tightly-coupling-ruby-and-r-in-graalvm-520b69e21021.
|
|
119
|
+
* https://towardsdatascience.com/ruby-plotting-with-galaaz-an-example-of-tightly-coupling-ruby-and-r-in-graalvm-520b69e21021 (older GraalVM-era article; plotting ideas still apply).
|
|
121
120
|
* https://medium.freecodecamp.org/how-to-make-beautiful-ruby-plots-with-galaaz-320848058857
|
|
122
121
|
|
|
123
122
|
This is not a blog post on __R markdown__, and the interested user is directed to the following links
|
|
@@ -132,7 +131,7 @@ gKnitting Ruby and R documents quickly.
|
|
|
132
131
|
## The Yaml header
|
|
133
132
|
|
|
134
133
|
An __R markdown__ document should start with a Yaml header and be stored in a file with
|
|
135
|
-
'.Rmd' extension. This document has the following header for
|
|
134
|
+
'.Rmd' extension. This document has the following header for gKnitting an HTML document.
|
|
136
135
|
|
|
137
136
|
```
|
|
138
137
|
---
|
|
@@ -140,7 +139,7 @@ title: "How to do reproducible research in Ruby with gKnit"
|
|
|
140
139
|
author:
|
|
141
140
|
- "Rodrigo Botafogo"
|
|
142
141
|
- "Daniel Mossé - University of Pittsburgh"
|
|
143
|
-
tags: [Tech, Data Science, Ruby, R,
|
|
142
|
+
tags: [Tech, Data Science, Ruby, R, JRuby, "GNU R", Galaaz]
|
|
144
143
|
date: "20/02/2019"
|
|
145
144
|
output:
|
|
146
145
|
html_document:
|
|
@@ -199,7 +198,7 @@ Running and executing Ruby and R code is actually what really interests us is th
|
|
|
199
198
|
Inserting a code chunk is done by adding code in a block delimited by three back ticks
|
|
200
199
|
followed by an open
|
|
201
200
|
curly brace ('{') followed with the engine name (r, ruby, rb, include, ...), an
|
|
202
|
-
any optional chunk_label and options, as shown
|
|
201
|
+
any optional chunk_label and options, as shown below:
|
|
203
202
|
|
|
204
203
|
````
|
|
205
204
|
```{engine_name [chunk_label], [chunk_options]}`r ''`
|
|
@@ -288,7 +287,7 @@ grammar of graphics" [@Wilkinson:grammar_of_graphics]. The idea of the grammar o
|
|
|
288
287
|
is to build a graphics by adding layers to the plot. More information can be found in
|
|
289
288
|
https://towardsdatascience.com/a-comprehensive-guide-to-the-grammar-of-graphics-for-effective-visualization-of-multi-dimensional-1f92b4ed4149.
|
|
290
289
|
|
|
291
|
-
In the plot
|
|
290
|
+
In the plot below the 'mpg' dataset from base R is used. "The data concerns city-cycle fuel
|
|
292
291
|
consumption in miles per gallon, to be predicted in terms of 3 multivalued discrete and 5
|
|
293
292
|
continuous attributes." (Quinlan, 1993)
|
|
294
293
|
|
|
@@ -369,21 +368,21 @@ where multiplication works as expected.
|
|
|
369
368
|
|
|
370
369
|
### Accessing R from Ruby
|
|
371
370
|
|
|
372
|
-
One of the nice aspects of Galaaz
|
|
371
|
+
One of the nice aspects of Galaaz 2.0 is that variables and functions defined in R can
|
|
373
372
|
be easily accessed from Ruby. This next chunk, reads data from R and uses the 'reduce_sum'
|
|
374
373
|
function defined previously. To access an R variable from Ruby the '~' function should be
|
|
375
374
|
applied to the Ruby symbol representing the R variable. Since the R variable is called 'r_vec',
|
|
376
|
-
in Ruby, the symbol to acess it is ':r_vec' and thus '
|
|
375
|
+
in Ruby, the symbol to acess it is ':r_vec' and thus '~R[:r_vec]' retrieves the value of the
|
|
377
376
|
variable.
|
|
378
377
|
|
|
379
378
|
```{ruby access_r}
|
|
380
|
-
puts
|
|
379
|
+
puts ~R[:r_vec]
|
|
381
380
|
```
|
|
382
381
|
|
|
383
382
|
In order to call an R function, the 'R.' module is used as follows
|
|
384
383
|
|
|
385
384
|
```{ruby call_r_func}
|
|
386
|
-
puts R.reduce_sum(
|
|
385
|
+
puts R.reduce_sum(~R[:r_vec])
|
|
387
386
|
```
|
|
388
387
|
|
|
389
388
|
### Ruby Plotting
|
|
@@ -410,7 +409,7 @@ ten aspects are:
|
|
|
410
409
|
|
|
411
410
|
```{ruby diverging_plot_pre}
|
|
412
411
|
# copy the R variable :mtcars to the Ruby mtcars variable
|
|
413
|
-
mtcars =
|
|
412
|
+
mtcars = ~R[:mtcars]
|
|
414
413
|
|
|
415
414
|
# create a new column 'car_name' to store the car names so that it can be
|
|
416
415
|
# used for plotting. The 'rownames' of the data frame cannot be used as
|
|
@@ -563,17 +562,17 @@ Here, for instance, is a table definition in HTML and its output in the document
|
|
|
563
562
|
</div>
|
|
564
563
|
|
|
565
564
|
But manually creating HTML output is not always easy or desirable, specially
|
|
566
|
-
if we intend the document to be rendered in other formats, for example, as
|
|
565
|
+
if we intend the document to be rendered in other formats, for example, as LaTeX.
|
|
567
566
|
Also, The above
|
|
568
567
|
table looks ugly. The 'kableExtra' library is a great library for
|
|
569
568
|
creating beautiful tables. Take a look at https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html
|
|
570
569
|
|
|
571
570
|
In the next chunk, we output the 'mtcars' dataframe from R in a nicely formatted
|
|
572
|
-
table. Note that we retrieve the mtcars dataframe by using '
|
|
571
|
+
table. Note that we retrieve the mtcars dataframe by using '~R[:mtcars]'.
|
|
573
572
|
|
|
574
573
|
```{ruby nice_table}
|
|
575
574
|
R.install_and_loads('kableExtra')
|
|
576
|
-
outputs (
|
|
575
|
+
outputs (~R[:mtcars]).kable.kable_styling
|
|
577
576
|
```
|
|
578
577
|
|
|
579
578
|
### Including Ruby files in a chunk
|
|
@@ -601,7 +600,7 @@ true, ruby's 'require\_relative' semantics is used to load the file, when false,
|
|
|
601
600
|
```
|
|
602
601
|
````
|
|
603
602
|
|
|
604
|
-
|
|
603
|
+
Below we include file 'model.rb', which is in the same directory of this blog.
|
|
605
604
|
This code uses R 'caret' package to split a dataset in a train and test sets.
|
|
606
605
|
The 'caret' package is a very important a useful package for doing Data Analysis,
|
|
607
606
|
it has hundreds of functions for all steps of the Data Analysis workflow. To
|
|
@@ -622,7 +621,7 @@ will install the package if it is not already installed and can take a while.
|
|
|
622
621
|
```
|
|
623
622
|
|
|
624
623
|
```{ruby model_partition}
|
|
625
|
-
mtcars =
|
|
624
|
+
mtcars = ~R[:mtcars]
|
|
626
625
|
model = Model.new(mtcars, percent_train: 0.8)
|
|
627
626
|
model.partition(:mpg)
|
|
628
627
|
puts model.train.head
|
|
@@ -634,9 +633,9 @@ puts model.test.head
|
|
|
634
633
|
gKnit also allows developers to document and load files that are not in the same directory
|
|
635
634
|
of the '.Rmd' file.
|
|
636
635
|
|
|
637
|
-
Here is an example of loading the 'find.rb' file from
|
|
636
|
+
Here is an example of loading the 'find.rb' file from **JRuby** (via `$LOAD_PATH`). In this example, relative
|
|
638
637
|
is set to FALSE, so Ruby will look for the file in its $LOAD\_PATH, and the user does not
|
|
639
|
-
need to
|
|
638
|
+
need to know its directory.
|
|
640
639
|
|
|
641
640
|
````
|
|
642
641
|
```{include find, relative = FALSE}`r ''`
|
|
@@ -658,9 +657,9 @@ the Yaml header to generate this blog in PDF format instead of HTML:
|
|
|
658
657
|
|
|
659
658
|
```
|
|
660
659
|
---
|
|
661
|
-
title: "gKnit - Ruby and R Knitting with Galaaz
|
|
660
|
+
title: "gKnit - Ruby and R Knitting with Galaaz (JRuby + GNU R)"
|
|
662
661
|
author: "Rodrigo Botafogo"
|
|
663
|
-
tags: [Galaaz, Ruby, R,
|
|
662
|
+
tags: [Galaaz, Ruby, R, JRuby, "GNU R", knitr, gknit]
|
|
664
663
|
date: "29 October 2018"
|
|
665
664
|
output:
|
|
666
665
|
pdf\_document:
|
|
@@ -673,27 +672,23 @@ output:
|
|
|
673
672
|
|
|
674
673
|
# Conclusion
|
|
675
674
|
|
|
676
|
-
In order to do reproducible research, one of the main basic tools needed is a
|
|
675
|
+
In order to do reproducible research, one of the main basic tools needed is a system that
|
|
677
676
|
allows "literate programming" where text, code and possibly a set of files can be compiled
|
|
678
677
|
onto a report that can be easily distributed to peers. Peers should be able to use this
|
|
679
678
|
same set of files to rerun the compilation by their own obtaining the exact same original
|
|
680
679
|
report. gKnit is such a system for Ruby and R. It uses __R Markdown__ to integrate
|
|
681
|
-
text and code chunks, where code chunks can either be part of the __R
|
|
680
|
+
text and code chunks, where code chunks can either be part of the __R Markdown__ file or
|
|
682
681
|
be imported from files in the system. Ideally, in reproducible research, all the files
|
|
683
|
-
needed to rebuild a report should be
|
|
682
|
+
needed to rebuild a report should be easily packed together (in the same zipped directory)
|
|
684
683
|
and distributed to peers for reexecution.
|
|
685
684
|
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
same effort it is taking Python to implement NumPy, Pandas and all supporting libraries and it
|
|
694
|
-
is unlikely that this effort would ever be done. GraalVM has allowed Ruby to profit "almost
|
|
695
|
-
for free" from this huge set of libraries and tools that make R one of the most used
|
|
696
|
-
languages for data analysis and machine learning.
|
|
685
|
+
**Galaaz 2.0** pairs **JRuby** with **GNU R**: you keep the full CRAN/Bioconductor world in R while
|
|
686
|
+
writing orchestration, reuse, and application code in Ruby. The effort to wrap Ruby over R (Galaaz)
|
|
687
|
+
and to wrap Knitr as gKnit was tiny compared to reimplementing R’s ecosystem in Ruby—much like
|
|
688
|
+
Python’s investment in NumPy and Pandas, which no Ruby project is likely to duplicate.
|
|
689
|
+
|
|
690
|
+
An **earlier** prototype used Oracle’s **GraalVM** and Truffle interop; the **current** stack is
|
|
691
|
+
deliberately **standard GNU R** plus the Galaaz **bridge**, documented in the project manual.
|
|
697
692
|
|
|
698
693
|
More interesting than wrapping the R libraries with Ruby, is that Ruby adds
|
|
699
694
|
value to R, by allowing developers to use powerful and modern constructs for code reuse that
|
|
@@ -703,11 +698,10 @@ readability.
|
|
|
703
698
|
|
|
704
699
|
# Installing gKnit
|
|
705
700
|
|
|
706
|
-
## Prerequisites
|
|
701
|
+
## Prerequisites (Galaaz 2.0)
|
|
707
702
|
|
|
708
|
-
*
|
|
709
|
-
*
|
|
710
|
-
* FastR
|
|
703
|
+
* **JRuby** and a compatible **JDK**
|
|
704
|
+
* **GNU R** on your `PATH`
|
|
711
705
|
|
|
712
706
|
The following R packages will be automatically installed when necessary, but could be installed prior
|
|
713
707
|
to using gKnit if desired:
|
|
@@ -716,16 +710,17 @@ to using gKnit if desired:
|
|
|
716
710
|
* gridExtra
|
|
717
711
|
* knitr
|
|
718
712
|
|
|
719
|
-
Installation of R packages requires a development environment and can be time consuming.
|
|
720
|
-
the
|
|
713
|
+
Installation of R packages requires a development environment and can be time consuming. On Linux,
|
|
714
|
+
the usual build tools are typically enough. On macOS, Xcode command-line tools are commonly required.
|
|
721
715
|
|
|
722
716
|
## Preparation
|
|
723
717
|
|
|
724
|
-
* gem
|
|
718
|
+
* Install the **galaaz** gem (RubyGems or a local build / `path:`).
|
|
725
719
|
|
|
726
720
|
## Usage
|
|
727
721
|
|
|
728
|
-
* gknit \<filename\>
|
|
722
|
+
* **`bin/gknit`** \<filename\> (from the Galaaz repo or your install layout); use **`--output_format all`** for HTML and PDF together.
|
|
723
|
+
* Run Ruby with **`bin/galaaz-jruby`** when you need the same JVM flags as the project (see the manual).
|
|
729
724
|
|
|
730
725
|
|
|
731
726
|
# References
|