galaaz 0.5.0 → 2.0.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 +26 -0
- data/LICENSE +0 -0
- data/README.md +1360 -636
- data/Rakefile +61 -41
- data/bin/galaaz-bootstrap +137 -0
- data/bin/galaaz-jruby +14 -0
- data/bin/galaaz_jruby_env.inc.sh +6 -0
- data/bin/gbookdown +64 -0
- data/bin/gknit +84 -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 +43 -0
- data/bin/run_example +14 -0
- data/bin/run_old_rspec +19 -0
- data/bin/run_rspec +23 -0
- data/bin/run_rspec_subset +38 -0
- data/bin/run_slow_rspec +19 -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-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-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 +852 -239
- data/blogs/manual/manual.log +1786 -0
- data/blogs/manual/manual.md +1360 -636
- 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-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/examples/50Plots_MasterList/Images/midwest-scatterplot.PNG +0 -0
- data/examples/50Plots_MasterList/ScatterPlot.rb +0 -0
- data/examples/50Plots_MasterList/scatter_plot.rb +0 -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 +53 -0
- data/examples/bioconductor_deseq2_airway/bench_r_three_same_process.R +34 -0
- data/examples/bioconductor_deseq2_airway/deseq2_airway_galaaz.rb +33 -0
- data/examples/bioconductor_deseq2_airway/deseq2_airway_galaaz_optimized.rb +34 -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 +13 -0
- data/examples/islr/ch2.spec.rb +37 -7
- data/examples/islr/ch3.spec.rb +11 -2
- data/examples/islr/ch3_boston.rb +27 -0
- data/examples/islr/ch3_multiple_regression.rb +0 -0
- data/examples/islr/ch6.spec.rb +24 -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 +3 -2
- data/examples/misc/moneyball.rb +0 -0
- data/examples/misc/subsetting.rb +0 -0
- data/examples/multithread_shards_to_r/shards_to_r.rb +67 -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 +0 -0
- data/examples/sthda_ggplot/one_variable_continuous/density_gg.rb +0 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_area.rb +0 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_density.rb +2 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_dotplot.rb +0 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_freqpoly.rb +0 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_histogram.rb +0 -0
- data/examples/sthda_ggplot/one_variable_continuous/histogram_density.rb +0 -0
- data/examples/sthda_ggplot/one_variable_continuous/stat.rb +0 -0
- data/examples/sthda_ggplot/one_variable_discrete/bar.rb +0 -0
- data/examples/sthda_ggplot/qplots/box_violin_dot.rb +0 -0
- data/examples/sthda_ggplot/qplots/scatter_plots.rb +0 -0
- data/examples/sthda_ggplot/scatter_gg.rb +0 -0
- data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_bin2d.rb +0 -0
- data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_density2d.rb +0 -0
- data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_hex.rb +0 -0
- data/examples/sthda_ggplot/two_variables_cont_cont/geom_point.rb +0 -0
- data/examples/sthda_ggplot/two_variables_cont_cont/geom_smooth.rb +0 -0
- data/examples/sthda_ggplot/two_variables_cont_cont/misc.rb +0 -0
- data/examples/sthda_ggplot/two_variables_cont_function/geom_area.rb +4 -3
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_bar.rb +0 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_boxplot.rb +0 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_dotplot.rb +0 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_jitter.rb +0 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_line.rb +0 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_violin.rb +0 -0
- data/examples/sthda_ggplot/two_variables_disc_disc/geom_jitter.rb +0 -0
- data/examples/sthda_ggplot/two_variables_error/geom_crossbar.rb +0 -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 +147 -31
- data/lib/galaaz.rb +0 -0
- data/lib/galaaz_jruby.rb +22 -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 +194 -64
- 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
|
@@ -1,78 +1,36 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Ruby Plotting with Galaaz"
|
|
3
|
-
subtitle: "An example of tightly coupling Ruby and R in GraalVM"
|
|
4
|
-
author: "Rodrigo Botafogo"
|
|
5
|
-
tags: [Galaaz, Ruby, R, TruffleRuby, FastR, GraalVM, ggplot2]
|
|
6
|
-
date: "16 October 2018"
|
|
7
|
-
output:
|
|
8
|
-
html_document:
|
|
9
|
-
self_contained: true
|
|
10
|
-
keep_md: true
|
|
11
|
-
pdf_document:
|
|
12
|
-
includes:
|
|
13
|
-
in_header: "../../sty/galaaz.sty"
|
|
14
|
-
keep_tex: yes
|
|
15
|
-
number_sections: yes
|
|
16
|
-
toc: true
|
|
17
|
-
toc_depth: 2
|
|
18
|
-
md_document:
|
|
19
|
-
variant: markdown_github
|
|
20
|
-
fontsize: 11pt
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
1
|
# Introduction
|
|
26
2
|
|
|
27
|
-
Galaaz is a system for tightly coupling Ruby and R.
|
|
28
|
-
a large community, a very large set of libraries and
|
|
29
|
-
it lacks libraries for data science,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
Often developers have to make uncomfortable compromises that require them
|
|
55
|
-
to rewrite their software in other languages. For example:
|
|
56
|
-
|
|
57
|
-
* “That library is not available in my language. I need to rewrite it.”
|
|
58
|
-
* “That language would be the perfect fit for my problem, but we cannot
|
|
59
|
-
run it in our environment.”
|
|
60
|
-
* “That problem is already solved in my language, but the language is
|
|
61
|
-
too slow.”
|
|
62
|
-
|
|
63
|
-
With GraalVM we aim to allow developers to freely choose the right language
|
|
64
|
-
for the task at hand without making compromises.
|
|
65
|
-
|
|
66
|
-
Interested readers should also check out the following sites:
|
|
67
|
-
|
|
68
|
-
* [GraalVM Home](https://www.graalvm.org/)
|
|
69
|
-
* [TruffleRuby](https://github.com/oracle/truffleruby)
|
|
70
|
-
* [FastR](https://github.com/oracle/fastr)
|
|
71
|
-
* [Faster R with FastR](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb)
|
|
3
|
+
Galaaz is a system for tightly coupling Ruby and R. Ruby is a powerful
|
|
4
|
+
language, with a large community, a very large set of libraries and
|
|
5
|
+
great for web development. However, it lacks libraries for data science,
|
|
6
|
+
statistics, scientific plotting and machine learning. On the other hand,
|
|
7
|
+
R is considered one of the most powerful languages for solving all of
|
|
8
|
+
the above problems. Maybe the strongest competitor to R is Python with
|
|
9
|
+
libraries such as NumPy, Panda, SciPy, SciKit-Learn and a couple more.
|
|
10
|
+
|
|
11
|
+
With Galaaz we do not intend to re-implement any of the scientific
|
|
12
|
+
libraries in R; we allow for very tight coupling between the two
|
|
13
|
+
languages to the point that the Ruby developer does not need to think
|
|
14
|
+
about R syntax for every call. **Galaaz 2.0** does this with
|
|
15
|
+
**[JRuby](https://www.jruby.org/)** and **GNU R**: a **bridge**
|
|
16
|
+
evaluates R from Ruby and exchanges data between processes.
|
|
17
|
+
|
|
18
|
+
An **earlier** Galaaz prototype used Oracle’s **GraalVM** with
|
|
19
|
+
**TruffleRuby** and **FastR** in one JVM. That stack is **historical**;
|
|
20
|
+
today’s documentation and tooling assume **JRuby + GNU R** (see the
|
|
21
|
+
project manual and **`bin/galaaz-jruby`** / **`bin/gknit`**).
|
|
22
|
+
|
|
23
|
+
For background on the old stack:
|
|
24
|
+
|
|
25
|
+
- [GraalVM Home](https://www.graalvm.org/)
|
|
26
|
+
- [TruffleRuby](https://github.com/oracle/truffleruby)
|
|
27
|
+
- [FastR](https://github.com/oracle/fastr)
|
|
28
|
+
- [Faster R with
|
|
29
|
+
FastR](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb)
|
|
72
30
|
|
|
73
31
|
## What does Galaaz mean
|
|
74
32
|
|
|
75
|
-
Galaaz is the Portuguese name for
|
|
33
|
+
Galaaz is the Portuguese name for “Galahad”. From Wikipedia:
|
|
76
34
|
|
|
77
35
|
Sir Galahad (sometimes referred to as Galeas or Galath),
|
|
78
36
|
in Arthurian legend, is a knight of King Arthur's Round Table and one
|
|
@@ -87,32 +45,33 @@ Galaaz is the Portuguese name for "Galahad". From Wikipedia:
|
|
|
87
45
|
|
|
88
46
|
# Galaaz Demo
|
|
89
47
|
|
|
90
|
-
## Prerequisites
|
|
48
|
+
## Prerequisites (Galaaz 2.0)
|
|
91
49
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
* FastR
|
|
50
|
+
- **JRuby** and a compatible **JDK**
|
|
51
|
+
- **GNU R** on your `PATH`
|
|
95
52
|
|
|
96
|
-
The following R packages will be automatically installed when necessary,
|
|
97
|
-
to the demo if desired:
|
|
53
|
+
The following R packages will be automatically installed when necessary,
|
|
54
|
+
but could be installed prior to the demo if desired:
|
|
98
55
|
|
|
99
|
-
|
|
100
|
-
|
|
56
|
+
- ggplot2
|
|
57
|
+
- gridExtra
|
|
101
58
|
|
|
102
|
-
Installation of R packages requires a development environment.
|
|
103
|
-
tools should be enough.
|
|
59
|
+
Installation of R packages requires a development environment. In Linux,
|
|
60
|
+
the gnu compiler and tools should be enough. I am not sure what is
|
|
61
|
+
needed on the Mac.
|
|
104
62
|
|
|
105
|
-
In order to run the
|
|
63
|
+
In order to run the ‘specs’ the following Ruby package is necessary:
|
|
106
64
|
|
|
107
|
-
|
|
65
|
+
- gem install rspec
|
|
108
66
|
|
|
109
67
|
## Preparation
|
|
110
68
|
|
|
111
|
-
|
|
69
|
+
- gem install galaaz
|
|
112
70
|
|
|
113
71
|
## Running the demo
|
|
114
72
|
|
|
115
|
-
The ggplot for this demos was extracted from:
|
|
73
|
+
The ggplot for this demos was extracted from:
|
|
74
|
+
<http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html>.
|
|
116
75
|
|
|
117
76
|
On the console do
|
|
118
77
|
|
|
@@ -124,25 +83,23 @@ Doing on the console
|
|
|
124
83
|
|
|
125
84
|
> galaaz -T
|
|
126
85
|
|
|
127
|
-
will show a list with all available demos.
|
|
128
|
-
substitute the call to
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
'gem install rspec'.
|
|
86
|
+
will show a list with all available demos. To run any of the demos in
|
|
87
|
+
the list, substitute the call to ‘rake’ to ‘galaaz’. For instance, one
|
|
88
|
+
of the examples in the list is ‘rake sthda:bar’. In order to run this
|
|
89
|
+
example just do ‘galaaz sthda:bar’. Doing ‘galaaz sthda:all’ will run
|
|
90
|
+
all demos in the sthda cathegory. Some of the examples require ‘rspec’
|
|
91
|
+
do be available. To install ‘rspec’ just do ‘gem install rspec’.
|
|
134
92
|
|
|
135
93
|
# The demo code
|
|
136
94
|
|
|
95
|
+
The following is the Ruby code and plot for the above example. There is
|
|
96
|
+
a small difference between the code in the example and the code bellow.
|
|
97
|
+
If the example is ran, the plot will appear on the screen, bellow, we
|
|
98
|
+
generate an ‘svg’ image and then include it in this document. In order
|
|
99
|
+
to generate and image, the R.svg device is used. To generate the plot on
|
|
100
|
+
the screen, use the R.awt device, as commented on the code.
|
|
137
101
|
|
|
138
|
-
|
|
139
|
-
the code in the example and the code bellow. If the example is ran, the plot will appear on the
|
|
140
|
-
screen, bellow, we generate an 'svg' image and then include it in this document. In order to
|
|
141
|
-
generate and image, the R.svg device is used. To generate the plot on the screen, use the R.awt
|
|
142
|
-
device, as commented on the code.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
```ruby
|
|
102
|
+
``` ruby
|
|
146
103
|
require 'galaaz'
|
|
147
104
|
require 'ggplot'
|
|
148
105
|
|
|
@@ -150,7 +107,7 @@ require 'ggplot'
|
|
|
150
107
|
R.options(scipen: 999) # turn-off scientific notation like 1e+48
|
|
151
108
|
R.theme_set(R.theme_bw) # pre-set the bw theme.
|
|
152
109
|
|
|
153
|
-
midwest =
|
|
110
|
+
midwest = ~R[:midwest]
|
|
154
111
|
|
|
155
112
|
# Scatterplot
|
|
156
113
|
gg = midwest.ggplot(E.aes(x: :area, y: :poptotal)) +
|
|
@@ -167,14 +124,11 @@ gg = midwest.ggplot(E.aes(x: :area, y: :poptotal)) +
|
|
|
167
124
|
puts gg
|
|
168
125
|
```
|
|
169
126
|
|
|
170
|
-
|
|
171
|
-
<!-- -->
|
|
172
|
-
|
|
127
|
+

|
|
173
128
|
|
|
174
129
|
In R, the code to generate this plot is the following
|
|
175
130
|
|
|
176
|
-
|
|
177
|
-
```r
|
|
131
|
+
``` r
|
|
178
132
|
# install.packages("ggplot2")
|
|
179
133
|
# load package and data
|
|
180
134
|
options(scipen=999) # turn-off scientific notation like 1e+48
|
|
@@ -198,39 +152,44 @@ gg <- ggplot(midwest, aes(x=area, y=poptotal)) +
|
|
|
198
152
|
plot(gg)
|
|
199
153
|
```
|
|
200
154
|
|
|
201
|
-
Note that both codes are very similar.
|
|
202
|
-
any functions,
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
One last
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
evaluated in R, i.e., in R when calling
|
|
211
|
-
geom_point
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
155
|
+
Note that both codes are very similar. The Ruby code requires the use of
|
|
156
|
+
“R.” before calling any functions, for instance R function ‘geom_point’
|
|
157
|
+
becomes ‘R.geom_point’ in Ruby. R named parameters such as (col = state,
|
|
158
|
+
size = popdensity), become in Ruby (col: :state, size: :popdensity).
|
|
159
|
+
|
|
160
|
+
One last point that needs to be observed is the call to the ‘aes’
|
|
161
|
+
function. In Ruby instead of doing ‘R.aes’, we use ‘E.aes’. The
|
|
162
|
+
explanation of why E.aes is needed is an advanced topic in R and depends
|
|
163
|
+
on what is know as Non-standard Evaluation (NSE) in R. In short,
|
|
164
|
+
function ‘aes’ is lazily evaluated in R, i.e., in R when calling
|
|
165
|
+
geom_point(aes(col=state, size=popdensity)), function geom_point
|
|
166
|
+
receives as argument something similar to a string containing
|
|
167
|
+
‘aes(col=state, size=popdensity)’, and the aes function will be
|
|
168
|
+
evaluated inside the geom_point function. In Ruby, there is no Lazy
|
|
169
|
+
evaluation and doing R.aes would try to evaluate aes immediately. In
|
|
170
|
+
order to delay the evaluation of function aes we need to use E.aes. The
|
|
171
|
+
interested reader on NSE in R is directed to
|
|
172
|
+
<http://adv-r.had.co.nz/Computing-on-the-language.html>.
|
|
216
173
|
|
|
217
174
|
# An extension to the example
|
|
218
175
|
|
|
219
|
-
If both codes are so similar, then why would one use Ruby instead of R
|
|
220
|
-
after all?
|
|
221
|
-
|
|
222
|
-
Ruby is a modern OO language with numerous very useful constructs such as classes, modules, blocks,
|
|
223
|
-
procs, etc. The example above focus on the coupling of both languages, and does not show the
|
|
224
|
-
use of other Ruby constructs. In the following example, we will show a more complex example using
|
|
225
|
-
other Ruby constructs. This is certainly not a very well written and robust Ruby code, but
|
|
226
|
-
it give the idea of how Ruby and R are strongly coupled.
|
|
176
|
+
If both codes are so similar, then why would one use Ruby instead of R
|
|
177
|
+
and what good is galaaz after all?
|
|
227
178
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
179
|
+
Ruby is a modern OO language with numerous very useful constructs such
|
|
180
|
+
as classes, modules, blocks, procs, etc. The example above focus on the
|
|
181
|
+
coupling of both languages, and does not show the use of other Ruby
|
|
182
|
+
constructs. In the following example, we will show a more complex
|
|
183
|
+
example using other Ruby constructs. This is certainly not a very well
|
|
184
|
+
written and robust Ruby code, but it give the idea of how Ruby and R are
|
|
185
|
+
strongly coupled.
|
|
231
186
|
|
|
187
|
+
Let’s imagine that we work in a corporation that has its plot themes.
|
|
188
|
+
So, it has defined a ‘CorpTheme’ module. Plots in this corporation
|
|
189
|
+
should not have grids, numbers in labels should not use scientific
|
|
190
|
+
notation and the preferred color is blue.
|
|
232
191
|
|
|
233
|
-
```ruby
|
|
192
|
+
``` ruby
|
|
234
193
|
# corp_theme.rb
|
|
235
194
|
# defines the corporate theme for all plots
|
|
236
195
|
|
|
@@ -270,8 +229,7 @@ end
|
|
|
270
229
|
|
|
271
230
|
We now define a ScatterPlot class:
|
|
272
231
|
|
|
273
|
-
|
|
274
|
-
```ruby
|
|
232
|
+
``` ruby
|
|
275
233
|
# ScatterPlot.rb
|
|
276
234
|
# creates a scatter plot and allow some configuration
|
|
277
235
|
|
|
@@ -363,14 +321,14 @@ class ScatterPlot
|
|
|
363
321
|
end
|
|
364
322
|
```
|
|
365
323
|
|
|
366
|
-
And this is the final code for making the scatter plot with the midwest
|
|
367
|
-
|
|
324
|
+
And this is the final code for making the scatter plot with the midwest
|
|
325
|
+
data
|
|
368
326
|
|
|
369
|
-
```ruby
|
|
327
|
+
``` ruby
|
|
370
328
|
require 'galaaz'
|
|
371
329
|
require 'ggplot'
|
|
372
330
|
|
|
373
|
-
sp = ScatterPlot.new(
|
|
331
|
+
sp = ScatterPlot.new(~R[:midwest], x: :area, y: :poptotal)
|
|
374
332
|
sp.title = "Midwest Dataset - Scatterplot"
|
|
375
333
|
sp.subtitle = "Area Vs Population"
|
|
376
334
|
sp.caption = "Source: midwest"
|
|
@@ -382,23 +340,25 @@ sp.add_smoothing_line(method: "glm")
|
|
|
382
340
|
sp.plot
|
|
383
341
|
```
|
|
384
342
|
|
|
385
|
-
|
|
386
|
-
<!-- -->
|
|
343
|
+

|
|
387
344
|
|
|
388
345
|
# Conclusion
|
|
389
346
|
|
|
390
|
-
R is a very powerful language for statistical analysis, data analytics,
|
|
391
|
-
and many other scientific applications with a
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
347
|
+
R is a very powerful language for statistical analysis, data analytics,
|
|
348
|
+
machine learning, plotting and many other scientific applications with a
|
|
349
|
+
very large package ecosystem. However R is often considered hard to
|
|
350
|
+
learn and lacking modern computer languages constructs such as object
|
|
351
|
+
oriented classes, modules, lambdas, etc. For this reason, many
|
|
352
|
+
developers have started or switched from R to Python.
|
|
353
|
+
|
|
354
|
+
With Galaaz, R programmers can almost transparently migrate from R to
|
|
355
|
+
Ruby, since syntax is almost identical and **GNU R** remains the engine
|
|
356
|
+
for statistics and **ggplot2**. Further, by using Galaaz the R developer
|
|
357
|
+
can start (slowly if needed) using Ruby’s constructs and libraries that
|
|
358
|
+
nicely complement R packages.
|
|
359
|
+
|
|
360
|
+
For the Ruby developer, Galaaz allows the immediate use of R functions
|
|
361
|
+
with minimal ceremony. As shown in the second example above, class
|
|
362
|
+
`ScatterPlot` hides most R call details from the Ruby developer.
|
|
363
|
+
**JRuby** provides **real parallel threads** on the Ruby side and access
|
|
364
|
+
to the JVM ecosystem when you need it.
|