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
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/blogs/test/test.Rmd
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Minimal gknit callback test"
|
|
3
|
+
output: html_document
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
```{r setup, echo=FALSE}
|
|
7
|
+
# Empty setup so structure matches oh_my; first engine run is the ruby chunk below.
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
```{ruby fig.ext='png'}
|
|
11
|
+
# Minimal ruby chunk: triggers process_options and options['fig.ext'].unboxed_get(0).
|
|
12
|
+
# Same R code path as oh_my.Rmd first ruby chunk (sends .GlobalEnv$g2_vN <- g2_vM[[1]] for fig.ext).
|
|
13
|
+
puts "ok"
|
|
14
|
+
```
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/examples/R/calc.R
CHANGED
|
File without changes
|
data/examples/R/java_interop.R
CHANGED
|
File without changes
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# DESeq2 Airway Walkthrough (Bioconductor + galaaz)
|
|
2
|
+
|
|
3
|
+
This document defines the first Bioconductor example we will implement with `galaaz`.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Run a canonical differential expression analysis from Bioconductor using `DESeq2` and the `airway` dataset, then validate that the workflow executes correctly with `galaaz`.
|
|
8
|
+
|
|
9
|
+
## Scope
|
|
10
|
+
|
|
11
|
+
- Focus on workflow execution and interoperability.
|
|
12
|
+
- Install Bioconductor dependencies directly in R (outside `galaaz`).
|
|
13
|
+
- Keep biological interpretation minimal for this first example.
|
|
14
|
+
|
|
15
|
+
## Precondition
|
|
16
|
+
|
|
17
|
+
Before running this example in `galaaz`, install and verify in R:
|
|
18
|
+
|
|
19
|
+
- `BiocManager`
|
|
20
|
+
- `DESeq2`
|
|
21
|
+
- `airway`
|
|
22
|
+
|
|
23
|
+
## Primer (what we are doing)
|
|
24
|
+
|
|
25
|
+
- RNA-seq count data contains integer read counts per gene and per sample.
|
|
26
|
+
- We compare treated vs untreated samples to find genes with significant changes.
|
|
27
|
+
- `DESeq2` models count data and returns:
|
|
28
|
+
- `log2FoldChange` (effect size)
|
|
29
|
+
- `pvalue`
|
|
30
|
+
- `padj` (multiple-testing corrected p-value)
|
|
31
|
+
|
|
32
|
+
## Planned Workflow
|
|
33
|
+
|
|
34
|
+
1. Load `DESeq2` and `airway`.
|
|
35
|
+
2. Load airway data and inspect counts plus sample metadata.
|
|
36
|
+
3. Define a design formula for condition effect (with relevant covariate if used in canonical example).
|
|
37
|
+
4. Build a `DESeqDataSet` object.
|
|
38
|
+
5. Pre-filter low-count genes.
|
|
39
|
+
6. Run `DESeq()` to fit the model.
|
|
40
|
+
7. Extract `results()` for the treatment comparison.
|
|
41
|
+
8. Sort and inspect top hits by adjusted p-value.
|
|
42
|
+
9. Produce one standard QC/result plot (for example `plotMA`).
|
|
43
|
+
|
|
44
|
+
## Validation Checks
|
|
45
|
+
|
|
46
|
+
- Packages load without runtime errors in the target environment.
|
|
47
|
+
- `DESeqDataSet` object is created successfully.
|
|
48
|
+
- `DESeq()` completes.
|
|
49
|
+
- `results()` returns expected columns and non-empty output.
|
|
50
|
+
- At least one standard DESeq2 plot call runs successfully.
|
|
51
|
+
|
|
52
|
+
## Out of Scope (for now)
|
|
53
|
+
|
|
54
|
+
- Installing packages via `galaaz`.
|
|
55
|
+
- Performance tuning or optimization.
|
|
56
|
+
- Deep biological interpretation of gene-level findings.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Run a galaaz DESeq2 airway example three times in one JRuby process (warm-up semantics).
|
|
4
|
+
#
|
|
5
|
+
# Usage (from repository root):
|
|
6
|
+
# bin/galaaz-jruby examples/bioconductor_deseq2_airway/bench_galaaz_three_same_process.rb
|
|
7
|
+
# bin/galaaz-jruby examples/bioconductor_deseq2_airway/bench_galaaz_three_same_process.rb optimized
|
|
8
|
+
# bin/galaaz-jruby examples/bioconductor_deseq2_airway/bench_galaaz_three_same_process.rb original
|
|
9
|
+
|
|
10
|
+
require 'galaaz'
|
|
11
|
+
|
|
12
|
+
root = File.expand_path('../..', __dir__)
|
|
13
|
+
Dir.chdir(root)
|
|
14
|
+
|
|
15
|
+
variant = (ARGV[0] || 'optimized').downcase
|
|
16
|
+
script = case variant
|
|
17
|
+
when 'original'
|
|
18
|
+
'deseq2_airway_galaaz.rb'
|
|
19
|
+
when 'optimized'
|
|
20
|
+
'deseq2_airway_galaaz_optimized.rb'
|
|
21
|
+
else
|
|
22
|
+
warn "Unknown variant #{variant.inspect}; use 'optimized' or 'original'"
|
|
23
|
+
exit 1
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
path = File.expand_path(script, __dir__)
|
|
27
|
+
|
|
28
|
+
unless File.file?(path)
|
|
29
|
+
warn "Missing #{path}"
|
|
30
|
+
exit 1
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
puts "=== galaaz (#{variant}): three runs, same process (root: #{root})"
|
|
34
|
+
times = []
|
|
35
|
+
3.times do |i|
|
|
36
|
+
t0 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
37
|
+
load path
|
|
38
|
+
t1 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
39
|
+
sec = t1 - t0
|
|
40
|
+
times << sec
|
|
41
|
+
puts format('galaaz run %d/3: %.2f s', i + 1, sec)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
warm = times[1..2]
|
|
45
|
+
ws = warm.sort
|
|
46
|
+
warm_median = (ws[0] + ws[1]) / 2.0
|
|
47
|
+
all_sorted = times.sort
|
|
48
|
+
all_median = all_sorted[1]
|
|
49
|
+
|
|
50
|
+
puts '---'
|
|
51
|
+
puts format('Warm median (runs 2–3): %.2f s', warm_median)
|
|
52
|
+
puts format('Warm mean (runs 2–3): %.2f s', warm.sum / warm.size)
|
|
53
|
+
puts format('All-run median: %.2f s', all_median)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Run the DESeq2 airway pipeline three times in a single R process (fair vs galaaz warm-up).
|
|
2
|
+
#
|
|
3
|
+
# Usage (from repository root):
|
|
4
|
+
# Rscript examples/bioconductor_deseq2_airway/bench_r_three_same_process.R
|
|
5
|
+
# Rscript examples/bioconductor_deseq2_airway/bench_r_three_same_process.R /path/to/galaaz
|
|
6
|
+
|
|
7
|
+
args <- commandArgs(trailingOnly = TRUE)
|
|
8
|
+
root <- if (length(args) >= 1L) {
|
|
9
|
+
normalizePath(args[[1L]], winslash = "/", mustWork = TRUE)
|
|
10
|
+
} else {
|
|
11
|
+
normalizePath(getwd(), winslash = "/", mustWork = TRUE)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
Sys.setenv(GALAAZ_BENCH_ROOT = root)
|
|
15
|
+
pipeline <- file.path(root, "examples/bioconductor_deseq2_airway/deseq2_airway_pipeline_for_bench.R")
|
|
16
|
+
if (!file.exists(pipeline)) {
|
|
17
|
+
stop("Pipeline not found: ", pipeline, " (wrong GALAAZ_BENCH_ROOT?)")
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
cat("=== R: three runs, same process (repository root:", root, ")\n", sep = "")
|
|
21
|
+
times <- numeric(3L)
|
|
22
|
+
for (i in seq_len(3L)) {
|
|
23
|
+
st <- system.time({
|
|
24
|
+
sys.source(pipeline, envir = new.env(parent = globalenv()), keep.source = FALSE)
|
|
25
|
+
}, gcFirst = FALSE)
|
|
26
|
+
times[[i]] <- unname(st[["elapsed"]])
|
|
27
|
+
cat(sprintf("R run %d/3: %.2f s\n", i, times[[i]]))
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
warm <- times[2:3]
|
|
31
|
+
cat("---\n")
|
|
32
|
+
cat(sprintf("Warm median (runs 2–3): %.2f s\n", stats::median(warm)))
|
|
33
|
+
cat(sprintf("Warm mean (runs 2–3): %.2f s\n", mean(warm)))
|
|
34
|
+
cat(sprintf("All-run median: %.2f s\n", stats::median(times)))
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'galaaz'
|
|
2
|
+
|
|
3
|
+
R.library('DESeq2')
|
|
4
|
+
R.library('airway')
|
|
5
|
+
R.data('airway')
|
|
6
|
+
|
|
7
|
+
airway = ~:airway
|
|
8
|
+
|
|
9
|
+
# Build DESeq2 dataset with one-sided formula: ~ cell + dex.
|
|
10
|
+
dds = R.DESeqDataSet(airway, design: (:all.til :cell + :dex))
|
|
11
|
+
|
|
12
|
+
# Prefilter genes with almost no counts.
|
|
13
|
+
keep = R.rowSums(R.counts(dds)) >= 10
|
|
14
|
+
dds = dds[keep, :all]
|
|
15
|
+
|
|
16
|
+
# Fit DE model and extract treatment effect.
|
|
17
|
+
dds = R.DESeq(dds)
|
|
18
|
+
res = R.results(dds, contrast: R.c('dex', 'trt', 'untrt'))
|
|
19
|
+
|
|
20
|
+
# Compact sanity outputs for quick verification.
|
|
21
|
+
puts "Samples: #{R.ncol(dds)}"
|
|
22
|
+
puts "Genes after prefilter: #{R.nrow(dds)}"
|
|
23
|
+
puts "Result rows: #{R.nrow(res)}"
|
|
24
|
+
puts "Result columns: #{R.colnames(res)}"
|
|
25
|
+
puts "Significant genes (padj < 0.05): #{R.sum(res.padj < 0.05, na__rm: true)}"
|
|
26
|
+
|
|
27
|
+
res_ordered = res[R.order(res.padj), :all]
|
|
28
|
+
puts R.head(R.as__data__frame(res_ordered), 10)
|
|
29
|
+
|
|
30
|
+
# Standard DESeq2 plot call written to file.
|
|
31
|
+
R.pdf('examples/bioconductor_deseq2_airway/plotMA_galaaz.pdf')
|
|
32
|
+
R.plotMA(res, ylim: R.c(-5, 5))
|
|
33
|
+
R.dev__off
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'galaaz'
|
|
2
|
+
|
|
3
|
+
R.library('DESeq2')
|
|
4
|
+
R.library('airway')
|
|
5
|
+
R.data('airway')
|
|
6
|
+
|
|
7
|
+
airway = ~:airway
|
|
8
|
+
|
|
9
|
+
# Build DESeq2 dataset with one-sided formula: ~ cell + dex.
|
|
10
|
+
dds = R.DESeqDataSet(airway, design: (:all.til :cell + :dex))
|
|
11
|
+
|
|
12
|
+
# Prefilter genes with almost no counts.
|
|
13
|
+
keep = R.rowSums(R.counts(dds)) >= 10
|
|
14
|
+
dds = dds[keep, :all]
|
|
15
|
+
|
|
16
|
+
# Fit DE model and extract treatment effect.
|
|
17
|
+
dds = R.DESeq(dds)
|
|
18
|
+
res = R.results(dds, contrast: R.c('dex', 'trt', 'untrt'))
|
|
19
|
+
|
|
20
|
+
# Ruby-style optimization: delegate object rendering to R print/cat.
|
|
21
|
+
padj = res.padj
|
|
22
|
+
res_ordered = res[R.order(padj), :all]
|
|
23
|
+
|
|
24
|
+
R.cat('Samples:', R.ncol(dds), '\n')
|
|
25
|
+
R.cat('Genes after prefilter:', R.nrow(dds), '\n')
|
|
26
|
+
R.cat('Result rows:', R.nrow(res), '\n')
|
|
27
|
+
R.cat('Result columns:', R.paste(R.colnames(res), collapse: ', '), '\n')
|
|
28
|
+
R.cat('Significant genes (padj < 0.05):', R.sum(padj < 0.05, na__rm: true), '\n')
|
|
29
|
+
R.print(R.head(res_ordered, 10))
|
|
30
|
+
|
|
31
|
+
# Standard DESeq2 plot call written to file.
|
|
32
|
+
R.pdf('examples/bioconductor_deseq2_airway/plotMA_galaaz_optimized.pdf')
|
|
33
|
+
R.plotMA(res, ylim: R.c(-5, 5))
|
|
34
|
+
R.dev__off
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
library(DESeq2)
|
|
2
|
+
library(airway)
|
|
3
|
+
|
|
4
|
+
# Load canonical airway example data.
|
|
5
|
+
data(airway)
|
|
6
|
+
airway$dex <- relevel(airway$dex, ref = "untrt")
|
|
7
|
+
|
|
8
|
+
# Build DESeq2 dataset using cell line as covariate and dex as treatment.
|
|
9
|
+
dds <- DESeqDataSet(airway, design = ~ cell + dex)
|
|
10
|
+
|
|
11
|
+
# Prefilter genes with almost no counts.
|
|
12
|
+
keep <- rowSums(counts(dds)) >= 10
|
|
13
|
+
dds <- dds[keep, ]
|
|
14
|
+
|
|
15
|
+
# Fit DE model and extract treatment effect.
|
|
16
|
+
dds <- DESeq(dds)
|
|
17
|
+
res <- results(dds, contrast = c("dex", "trt", "untrt"))
|
|
18
|
+
|
|
19
|
+
# Compact sanity outputs for quick verification.
|
|
20
|
+
cat("Samples:", ncol(dds), "\n")
|
|
21
|
+
cat("Genes after prefilter:", nrow(dds), "\n")
|
|
22
|
+
cat("Result rows:", nrow(res), "\n")
|
|
23
|
+
cat("Result columns:", paste(colnames(res), collapse = ", "), "\n")
|
|
24
|
+
cat("Significant genes (padj < 0.05):", sum(res$padj < 0.05, na.rm = TRUE), "\n")
|
|
25
|
+
|
|
26
|
+
res_ordered <- res[order(res$padj), ]
|
|
27
|
+
print(head(as.data.frame(res_ordered), 10))
|
|
28
|
+
|
|
29
|
+
# Standard DESeq2 plot call used in the walkthrough.
|
|
30
|
+
plotMA(res, ylim = c(-5, 5))
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# DESeq2 airway pipeline for timing benchmarks.
|
|
2
|
+
# Logic matches deseq2_airway_minimal.R; plot goes to PDF like the galaaz examples
|
|
3
|
+
# (avoids default graphics device variance in headless/automated runs).
|
|
4
|
+
#
|
|
5
|
+
# Not loaded by default from other examples — use only via bench_r_three_same_process.R.
|
|
6
|
+
|
|
7
|
+
library(DESeq2)
|
|
8
|
+
library(airway)
|
|
9
|
+
|
|
10
|
+
data(airway)
|
|
11
|
+
airway$dex <- relevel(airway$dex, ref = "untrt")
|
|
12
|
+
|
|
13
|
+
dds <- DESeqDataSet(airway, design = ~ cell + dex)
|
|
14
|
+
|
|
15
|
+
keep <- rowSums(counts(dds)) >= 10
|
|
16
|
+
dds <- dds[keep, ]
|
|
17
|
+
|
|
18
|
+
dds <- DESeq(dds)
|
|
19
|
+
res <- results(dds, contrast = c("dex", "trt", "untrt"))
|
|
20
|
+
|
|
21
|
+
cat("Samples:", ncol(dds), "\n")
|
|
22
|
+
cat("Genes after prefilter:", nrow(dds), "\n")
|
|
23
|
+
cat("Result rows:", nrow(res), "\n")
|
|
24
|
+
cat("Result columns:", paste(colnames(res), collapse = ", "), "\n")
|
|
25
|
+
cat("Significant genes (padj < 0.05):", sum(res$padj < 0.05, na.rm = TRUE), "\n")
|
|
26
|
+
|
|
27
|
+
res_ordered <- res[order(res$padj), ]
|
|
28
|
+
print(head(as.data.frame(res_ordered), 10))
|
|
29
|
+
|
|
30
|
+
root <- Sys.getenv("GALAAZ_BENCH_ROOT", unset = "")
|
|
31
|
+
if (!nzchar(root)) {
|
|
32
|
+
stop("Set GALAAZ_BENCH_ROOT to the galaaz repository root before sourcing this file (see bench_r_three_same_process.R).")
|
|
33
|
+
}
|
|
34
|
+
pdf(file.path(root, "examples/bioconductor_deseq2_airway/plotMA_bench_R.pdf"))
|
|
35
|
+
plotMA(res, ylim = c(-5, 5))
|
|
36
|
+
invisible(dev.off())
|
data/examples/islr/all.rb
CHANGED
|
@@ -27,6 +27,19 @@ require 'ggplot'
|
|
|
27
27
|
# load ISLR and MASS Libraries
|
|
28
28
|
R.install_and_loads('ISLR', 'MASS')
|
|
29
29
|
|
|
30
|
+
def galaaz_islr_all_debug(msg)
|
|
31
|
+
STDERR.puts "[DEBUG islr][all] #{Time.now.strftime('%H:%M:%S')} #{msg}"
|
|
32
|
+
STDERR.flush
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
galaaz_islr_all_debug('before require ch2.spec')
|
|
30
36
|
require_relative 'ch2.spec'
|
|
37
|
+
galaaz_islr_all_debug('after require ch2.spec')
|
|
38
|
+
|
|
39
|
+
galaaz_islr_all_debug('before require ch3.spec')
|
|
31
40
|
require_relative 'ch3.spec'
|
|
41
|
+
galaaz_islr_all_debug('after require ch3.spec')
|
|
42
|
+
|
|
43
|
+
galaaz_islr_all_debug('before require ch6.spec')
|
|
32
44
|
require_relative 'ch6.spec'
|
|
45
|
+
galaaz_islr_all_debug('after require ch6.spec')
|
data/examples/islr/ch2.spec.rb
CHANGED
|
@@ -69,8 +69,11 @@ context "ISLR" do
|
|
|
69
69
|
R.set__seed(3)
|
|
70
70
|
x = R.rnorm(50)
|
|
71
71
|
y = x + R.rnorm(50, mean: 40, sd: 0.1)
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
cor_xy = R.cor(x, y)
|
|
73
|
+
expected = 0.995717314227608
|
|
74
|
+
expect(cor_xy.respond_to?(:all__equal) ? cor_xy.all__equal(expected) : (cor_xy - expected).abs < 1e-9).to eq true
|
|
75
|
+
cor_xy2 = x.cor(y)
|
|
76
|
+
expect(cor_xy2.respond_to?(:all__equal) ? cor_xy2.all__equal(expected) : (cor_xy2 - expected).abs < 1e-9).to eq true
|
|
74
77
|
end
|
|
75
78
|
|
|
76
79
|
it "should allow to setting the seed" do
|
|
@@ -84,16 +87,24 @@ context "ISLR" do
|
|
|
84
87
|
it "should calculate the mean" do
|
|
85
88
|
R.set__seed(3)
|
|
86
89
|
y = R.rnorm(100)
|
|
87
|
-
|
|
90
|
+
m = y.mean
|
|
91
|
+
expect(m.respond_to?(:all__equal) ? m.all__equal(0.0110355710) : (m - 0.0110355710).abs < 1e-9).to eq true
|
|
88
92
|
end
|
|
89
93
|
|
|
90
94
|
it "should calculate the variance" do
|
|
91
95
|
R.set__seed(3)
|
|
92
96
|
y = R.rnorm(100)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
v = y.var
|
|
98
|
+
sd = y.sd
|
|
99
|
+
expected_var = 0.732867501277449
|
|
100
|
+
expected_sd = 0.856076808047881
|
|
101
|
+
expect(v.respond_to?(:all__equal) ? v.all__equal(expected_var) : (v - expected_var).abs < 1e-9).to eq true
|
|
102
|
+
expect(sd.respond_to?(:all__equal) ? sd.all__equal(expected_sd) : (sd - expected_sd).abs < 1e-9).to eq true
|
|
103
|
+
# var.sqrt should match sd when both are available
|
|
104
|
+
if v.respond_to?(:sqrt)
|
|
105
|
+
s = v.sqrt
|
|
106
|
+
expect(s.respond_to?(:all__equal) ? s.all__equal(expected_sd) : (s - expected_sd).abs < 1e-9).to eq true
|
|
107
|
+
end
|
|
97
108
|
end
|
|
98
109
|
|
|
99
110
|
end
|
|
@@ -101,8 +112,15 @@ context "ISLR" do
|
|
|
101
112
|
context "Chapter 2 - Graphics" do
|
|
102
113
|
|
|
103
114
|
it "should plot graphics" do
|
|
115
|
+
def galaaz_islr_debug(msg)
|
|
116
|
+
STDERR.puts "[DEBUG islr][ch2.spec][#{Time.now.strftime('%H:%M:%S')}] #{msg}"
|
|
117
|
+
STDERR.flush
|
|
118
|
+
end
|
|
119
|
+
|
|
104
120
|
# To see the graphic we need to set the device to awt
|
|
121
|
+
galaaz_islr_debug 'before R.awt'
|
|
105
122
|
R.awt
|
|
123
|
+
galaaz_islr_debug 'after R.awt'
|
|
106
124
|
x = R.rnorm(100)
|
|
107
125
|
y = R.rnorm(100)
|
|
108
126
|
# plot commands do not work. Need to work with ggplot or grid
|
|
@@ -113,16 +131,28 @@ context "ISLR" do
|
|
|
113
131
|
ylab: "this is the y-axis",
|
|
114
132
|
main: "Plot of X vs Y")
|
|
115
133
|
.print
|
|
134
|
+
galaaz_islr_debug 'after qplot.print'
|
|
116
135
|
# the graphics dies when the script ends... waiting 3 secs
|
|
117
136
|
# so that the graphic can be seen
|
|
137
|
+
galaaz_islr_debug 'before sleep(3)'
|
|
118
138
|
sleep(3)
|
|
139
|
+
galaaz_islr_debug 'after sleep(3)'
|
|
140
|
+
R.dev__off
|
|
119
141
|
end
|
|
120
142
|
|
|
121
143
|
it "should create a jpeg file" do
|
|
144
|
+
def galaaz_islr_debug(msg)
|
|
145
|
+
STDERR.puts "[DEBUG islr][ch2.spec][#{Time.now.strftime('%H:%M:%S')}] #{msg}"
|
|
146
|
+
STDERR.flush
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
galaaz_islr_debug 'jpeg test: start'
|
|
122
150
|
R.jpeg("/home/rbotafogo/desenv/galaaz/examples/islr/x_y_rnorm.jpg")
|
|
123
151
|
R.df = R.data__frame(x: R.rnorm(100), y: R.rnorm(100))
|
|
152
|
+
galaaz_islr_debug 'jpeg test: about to qplot'
|
|
124
153
|
puts R.qplot(:x, :y, data: :df, col: "green")
|
|
125
154
|
R.dev__off
|
|
155
|
+
galaaz_islr_debug 'jpeg test: after R.dev__off'
|
|
126
156
|
end
|
|
127
157
|
|
|
128
158
|
it "creates sequences with 'seq'" do
|
data/examples/islr/ch3.spec.rb
CHANGED
|
@@ -24,5 +24,14 @@
|
|
|
24
24
|
require 'galaaz'
|
|
25
25
|
require 'ggplot'
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
context "ISLR" do
|
|
28
|
+
context "Chapter 3 - Lab" do
|
|
29
|
+
it "runs ch3_boston (graphics + regression)" do
|
|
30
|
+
load File.expand_path('ch3_boston.rb', __dir__)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "runs ch3_multiple_regression (non-linear transformations)" do
|
|
34
|
+
load File.expand_path('ch3_multiple_regression.rb', __dir__)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/examples/islr/ch3_boston.rb
CHANGED
|
@@ -25,12 +25,23 @@ require 'ggplot'
|
|
|
25
25
|
|
|
26
26
|
R.install_and_loads('ISLR', 'MASS')
|
|
27
27
|
|
|
28
|
+
# Minimal breadcrumb logging to understand where the script gets stuck
|
|
29
|
+
# when running `rake islr:all` (chapters are executed as scripts).
|
|
30
|
+
def galaaz_islr_debug(msg)
|
|
31
|
+
STDERR.puts "[DEBUG islr][ch3_boston] #{Time.now.strftime('%H:%M:%S')} #{msg}"
|
|
32
|
+
STDERR.flush
|
|
33
|
+
end
|
|
34
|
+
|
|
28
35
|
# Simple linear regression from ISLR book. Chapter 3 Lab
|
|
29
36
|
# We are using qplot for plotting. It would be better to use
|
|
30
37
|
# ggplot2, but this is just to show simple ploting.
|
|
31
38
|
|
|
32
39
|
# load boston data frame on variable boston
|
|
40
|
+
bala = nil
|
|
41
|
+
bala2 = nil
|
|
42
|
+
galaaz_islr_debug('start; loading Boston')
|
|
33
43
|
boston = ~:Boston
|
|
44
|
+
galaaz_islr_debug('Boston loaded; printing names/lm')
|
|
34
45
|
|
|
35
46
|
puts boston.names
|
|
36
47
|
|
|
@@ -49,7 +60,9 @@ puts pred
|
|
|
49
60
|
puts boston.lstat
|
|
50
61
|
puts boston.medv
|
|
51
62
|
|
|
63
|
+
galaaz_islr_debug('before R.awt')
|
|
52
64
|
R.awt
|
|
65
|
+
galaaz_islr_debug('after R.awt; before first plot')
|
|
53
66
|
|
|
54
67
|
puts R.qplot(:lstat, :medv, data: :Boston, col: "red") +
|
|
55
68
|
R.geom_abline(intercept: boston_lm.coef[1],
|
|
@@ -62,25 +75,39 @@ puts R.qplot(:lstat, :medv, data: :Boston, col: "red") +
|
|
|
62
75
|
# a = gets.chomp
|
|
63
76
|
|
|
64
77
|
# sleep two seconds so that the graph shows up
|
|
78
|
+
galaaz_islr_debug('sleep(2) after first plot')
|
|
65
79
|
sleep(2)
|
|
80
|
+
galaaz_islr_debug('grid__newpage #1')
|
|
66
81
|
R.grid__newpage
|
|
67
82
|
|
|
83
|
+
galaaz_islr_debug('building my_data #2 and plotting #2')
|
|
68
84
|
R.my_data = R.data__frame(pred: R.predict(boston_lm), res: R.residuals(boston_lm))
|
|
69
85
|
puts R.qplot(:pred, :res, data: :my_data)
|
|
70
86
|
|
|
87
|
+
galaaz_islr_debug('sleep(2) after plot #2')
|
|
71
88
|
sleep(2)
|
|
89
|
+
galaaz_islr_debug('grid__newpage #2')
|
|
72
90
|
R.grid__newpage
|
|
73
91
|
|
|
92
|
+
galaaz_islr_debug('building my_data #3 and plotting #3')
|
|
74
93
|
R.my_data = R.data__frame(pred: R.predict(boston_lm), res: R.rstudent(boston_lm))
|
|
75
94
|
puts R.qplot(:pred, :res, data: :my_data)
|
|
76
95
|
|
|
96
|
+
galaaz_islr_debug('sleep(2) after plot #3')
|
|
77
97
|
sleep(2)
|
|
98
|
+
galaaz_islr_debug('grid__newpage #3')
|
|
78
99
|
R.grid__newpage
|
|
79
100
|
|
|
101
|
+
galaaz_islr_debug('hatvalues + plotting #4')
|
|
80
102
|
vals = R.hatvalues(boston_lm)
|
|
81
103
|
R.my_data = R.data__frame(size: (1..vals.size), values: vals)
|
|
82
104
|
# method size returns a Numeric... size is equivalent to 'length << 0'
|
|
83
105
|
puts R.qplot(:size, :values, data: :my_data)
|
|
84
106
|
|
|
107
|
+
galaaz_islr_debug('sleep(2) after plot #4')
|
|
85
108
|
sleep(2)
|
|
109
|
+
galaaz_islr_debug('grid__newpage #4')
|
|
86
110
|
R.grid__newpage
|
|
111
|
+
|
|
112
|
+
# Close the graphics device so later chapters don't keep an open AWT window.
|
|
113
|
+
R.dev__off
|
|
File without changes
|
data/examples/islr/ch6.spec.rb
CHANGED
|
@@ -29,34 +29,57 @@ context "ISLR" do
|
|
|
29
29
|
|
|
30
30
|
context "Chapter 6 - Subset Selection Methods - page 244" do
|
|
31
31
|
|
|
32
|
+
def galaaz_islr_debug(msg)
|
|
33
|
+
STDERR.puts "[DEBUG islr][ch6.spec][#{Time.now.strftime('%H:%M:%S')}] #{msg}"
|
|
34
|
+
STDERR.flush
|
|
35
|
+
end
|
|
36
|
+
|
|
32
37
|
before(:each) do
|
|
33
38
|
@hitters = ~:Hitters
|
|
34
39
|
end
|
|
35
40
|
|
|
36
41
|
it "Should access the names of the dataset" do
|
|
42
|
+
galaaz_islr_debug 'test1 start (names/dim)'
|
|
37
43
|
expect(@hitters.names[1] == "AtBat").to eq true
|
|
38
44
|
expect(@hitters.names[5] == "RBI").to eq true
|
|
39
45
|
expect(@hitters.names[11] == "CRuns").to eq true
|
|
40
46
|
expect(@hitters.dim == R.c(322, 20)).to eq true
|
|
47
|
+
galaaz_islr_debug 'test1 end'
|
|
41
48
|
end
|
|
42
49
|
|
|
43
50
|
it "Should count na's using 'R.sum'" do
|
|
51
|
+
galaaz_islr_debug 'test2 start (R.sum)'
|
|
44
52
|
expect(R.sum(@hitters.Salary.is__na) == 59).to eq true
|
|
45
53
|
expect(R.sum(@hitters.Salary.is__na)).to eq 59
|
|
54
|
+
galaaz_islr_debug 'test2 end'
|
|
46
55
|
end
|
|
47
56
|
|
|
48
57
|
it "Should count na's using Ruby Enumerable 'sum'" do
|
|
58
|
+
galaaz_islr_debug "test3 start (Ruby Enumerable sum over Salary)"
|
|
59
|
+
yielded = 0
|
|
60
|
+
salary = @hitters.Salary
|
|
61
|
+
galaaz_islr_debug "test3 salary fetched; about to salary.size"
|
|
62
|
+
sz = salary.size
|
|
63
|
+
galaaz_islr_debug "test3 salary.size=#{sz}; about to Salary.sum"
|
|
49
64
|
# method 'sum' is a Ruby Enumerable method. To count na's we can loop through
|
|
50
65
|
# every element and check if they are na or not. Note that the return os
|
|
51
66
|
# is__na is an R::Vector, so we need to 'pop' the value to a Ruby value in
|
|
52
67
|
# ordet to apply the '?' method
|
|
53
|
-
|
|
68
|
+
got = @hitters.Salary.sum do |e|
|
|
69
|
+
yielded += 1
|
|
70
|
+
galaaz_islr_debug("test3 yield #{yielded}") if yielded % 100 == 0
|
|
71
|
+
(e.is__na == true) ? 1 : 0
|
|
72
|
+
end
|
|
73
|
+
galaaz_islr_debug "test3 end (yielded=#{yielded}, got=#{got})"
|
|
74
|
+
expect(got).to eq 59
|
|
54
75
|
end
|
|
55
76
|
|
|
56
77
|
it "should remove missing values with na__omit" do
|
|
78
|
+
galaaz_islr_debug 'test4 start (na__omit)'
|
|
57
79
|
@hitters = @hitters.na__omit
|
|
58
80
|
expect(@hitters.dim == R.c(263, 20)).to eq true
|
|
59
81
|
expect(R.sum(@hitters.is__na)).to eq 0
|
|
82
|
+
galaaz_islr_debug 'test4 end'
|
|
60
83
|
end
|
|
61
84
|
|
|
62
85
|
end
|
data/examples/islr/x_y_rnorm.jpg
CHANGED
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|