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
data/specs/r_plots.spec.rb
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
##########################################################################################
|
|
4
|
-
# @author Rodrigo Botafogo
|
|
5
|
-
#
|
|
6
|
-
# Copyright © 2018 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
|
7
|
-
# and distribute this software and its documentation, without fee and without a signed
|
|
8
|
-
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
|
9
|
-
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
|
10
|
-
# distributions.
|
|
11
|
-
#
|
|
12
|
-
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
|
13
|
-
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
|
14
|
-
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
|
15
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
|
16
|
-
#
|
|
17
|
-
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
18
|
-
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
|
19
|
-
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
|
20
|
-
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
|
21
|
-
# OR MODIFICATIONS.
|
|
22
|
-
##########################################################################################
|
|
23
|
-
|
|
24
|
-
require 'galaaz'
|
|
25
|
-
|
|
26
|
-
describe R::Plots do
|
|
27
|
-
|
|
28
|
-
#----------------------------------------------------------------------------------------
|
|
29
|
-
context "Create a Plot" do
|
|
30
|
-
|
|
31
|
-
it "should create a bar plot" do
|
|
32
|
-
dev = R::Device.new('png', width: 5, height: 7, dpi: 300, record: true)
|
|
33
|
-
|
|
34
|
-
# opens de device
|
|
35
|
-
dev.open
|
|
36
|
-
# generate the bar plot
|
|
37
|
-
b = R.ggplot(:mpg, E.aes(:fl))
|
|
38
|
-
# prints the plot
|
|
39
|
-
print b + R.geom_bar
|
|
40
|
-
|
|
41
|
-
snap = dev.plot_snapshot
|
|
42
|
-
dev.save_plot(snap, 'snapshot', 'png', 5, 7, 'png', 300)
|
|
43
|
-
|
|
44
|
-
R.grid__newpage(recording: true)
|
|
45
|
-
|
|
46
|
-
# print a second bar chart
|
|
47
|
-
print b + R.geom_bar(fill: "steelblue", color: "steelblue") +
|
|
48
|
-
R.theme_minimal
|
|
49
|
-
|
|
50
|
-
# closes the device
|
|
51
|
-
dev.close
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should create a bar plot passing a block to the device" do
|
|
55
|
-
# creates the device and pass the plot spec in a block. No need to
|
|
56
|
-
# worry about opening and closing the device
|
|
57
|
-
dev = R::Device.new('svg', width: 5, height: 7, dpi: 300, record: true) {
|
|
58
|
-
b = R.ggplot(:mpg, E.aes(:fl))
|
|
59
|
-
print b + R.geom_bar
|
|
60
|
-
|
|
61
|
-
R.grid__newpage(recording: true)
|
|
62
|
-
|
|
63
|
-
# print a second bar chart
|
|
64
|
-
print b + R.geom_bar(fill: "steelblue", color: "steelblue") +
|
|
65
|
-
R.theme_minimal
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
end
|
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
##########################################################################################
|
|
4
|
-
# @author Rodrigo Botafogo
|
|
5
|
-
#
|
|
6
|
-
# Copyright © 2018 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
|
7
|
-
# and distribute this software and its documentation, without fee and without a signed
|
|
8
|
-
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
|
9
|
-
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
|
10
|
-
# distributions.
|
|
11
|
-
#
|
|
12
|
-
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
|
13
|
-
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
|
14
|
-
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
|
15
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
|
16
|
-
#
|
|
17
|
-
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
18
|
-
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
|
19
|
-
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
|
20
|
-
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
|
21
|
-
# OR MODIFICATIONS.
|
|
22
|
-
##########################################################################################
|
|
23
|
-
|
|
24
|
-
require 'galaaz'
|
|
25
|
-
require 'ggplot'
|
|
26
|
-
|
|
27
|
-
#========================================================================================
|
|
28
|
-
# class Expression in the R module extends Ruby's symbols, so that they can be used in
|
|
29
|
-
# forming expressions of the form ':x + :y' or more complex than that. Those
|
|
30
|
-
# expressions will then be converted to R expressions when necessary.
|
|
31
|
-
#========================================================================================
|
|
32
|
-
|
|
33
|
-
describe Symbol do
|
|
34
|
-
|
|
35
|
-
#========================================================================================
|
|
36
|
-
context "Working with Ruby expressions" do
|
|
37
|
-
|
|
38
|
-
before(:each) do
|
|
39
|
-
R.len = 10
|
|
40
|
-
R.sd = 20
|
|
41
|
-
R.vec = R.c(1, 2, 3, 4)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should convert a Ruby symbol into an R symbol with unary '+'" do
|
|
45
|
-
exp = +:len
|
|
46
|
-
expect(exp.class).to eq R::RSymbol
|
|
47
|
-
expect(exp.rclass).to eq "integer"
|
|
48
|
-
expect(exp.typeof).to eq "integer"
|
|
49
|
-
expect(exp.eval).to eq 10
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should convert a Ruby symbol into an R symbol with 'expr'" do
|
|
53
|
-
exp = R.expr(:len)
|
|
54
|
-
expect(exp.class).to eq R::RSymbol
|
|
55
|
-
expect(exp.rclass).to eq "integer"
|
|
56
|
-
expect(exp.typeof).to eq "integer"
|
|
57
|
-
expect(exp.eval).to eq 10
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should convert 'true' and 'false' to TRUE and FALSE in R" do
|
|
61
|
-
e = R.expr(true)
|
|
62
|
-
expect(e).to eq R.c(true)
|
|
63
|
-
e = R.expr(false)
|
|
64
|
-
expect(e).to eq R.c(false)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should allow binary operations with 'expressions'" do
|
|
68
|
-
e1 = +:len
|
|
69
|
-
e2 = e1 + 5
|
|
70
|
-
expect(e2.eval).to eq R.c(15)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should convert binary operations with Symbols to 'expressions'" do
|
|
74
|
-
e1 = :len + :sd
|
|
75
|
-
expect(e1.to_s).to eq "len + sd"
|
|
76
|
-
expect(e1.class).to eq R::Language
|
|
77
|
-
expect(e1.rclass).to eq "integer"
|
|
78
|
-
expect(e1.eval).to eq 30
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "should convert longer Ruby expressions to 'expression'" do
|
|
82
|
-
e1 = :len + :sd + 5
|
|
83
|
-
expect(e1.to_s).to eq "len + sd + 5L"
|
|
84
|
-
expect(e1.class).to eq R::Language
|
|
85
|
-
expect(e1.rclass).to eq "integer"
|
|
86
|
-
expect(e1.eval).to eq 35
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should operate with all comparison operators" do
|
|
90
|
-
df = R.data__frame(a: (1..5), b: (5..1), c: R.c(5, 3, 1, 4, 1))
|
|
91
|
-
|
|
92
|
-
e = :a > :b
|
|
93
|
-
expect(e.to_s).to eq "a > b"
|
|
94
|
-
expect(e.eval(df)).to eq R.c(false, false, false, true, true)
|
|
95
|
-
|
|
96
|
-
e = :a.gt :b
|
|
97
|
-
expect(e.to_s).to eq "a > b"
|
|
98
|
-
expect(e.eval(df)).to eq R.c(false, false, false, true, true)
|
|
99
|
-
|
|
100
|
-
e = :a >= :b
|
|
101
|
-
expect(e.to_s).to eq "a >= b"
|
|
102
|
-
expect(e.eval(df)).to eq R.c(false, false, true, true, true)
|
|
103
|
-
|
|
104
|
-
e = :a.ge :b
|
|
105
|
-
expect(e.to_s).to eq "a >= b"
|
|
106
|
-
expect(e.eval(df)).to eq R.c(false, false, true, true, true)
|
|
107
|
-
|
|
108
|
-
e = :a < :b
|
|
109
|
-
expect(e.to_s).to eq "a < b"
|
|
110
|
-
expect(e.eval(df)).to eq R.c(true, true, false, false, false)
|
|
111
|
-
|
|
112
|
-
e = :a.lt :b
|
|
113
|
-
expect(e.to_s).to eq "a < b"
|
|
114
|
-
expect(e.eval(df)).to eq R.c(true, true, false, false, false)
|
|
115
|
-
|
|
116
|
-
e = :a <= :b
|
|
117
|
-
expect(e.to_s).to eq "a <= b"
|
|
118
|
-
expect(e.eval(df)).to eq R.c(true, true, true, false, false)
|
|
119
|
-
|
|
120
|
-
e = :a.le :b
|
|
121
|
-
expect(e.to_s).to eq "a <= b"
|
|
122
|
-
expect(e.eval(df)).to eq R.c(true, true, true, false, false)
|
|
123
|
-
|
|
124
|
-
e = :a != :b
|
|
125
|
-
expect(e.to_s).to eq "a != b"
|
|
126
|
-
expect(e.eval(df)).to eq R.c(true, true, false, true, true)
|
|
127
|
-
|
|
128
|
-
e = :a.ne :b
|
|
129
|
-
expect(e.to_s).to eq "a != b"
|
|
130
|
-
expect(e.eval(df)).to eq R.c(true, true, false, true, true)
|
|
131
|
-
|
|
132
|
-
e = :a.eq :b
|
|
133
|
-
expect(e.to_s).to eq "a == b"
|
|
134
|
-
expect(e.eval(df)).to eq R.c(false, false, true, false, false)
|
|
135
|
-
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "should inline r objects in 'expressions'" do
|
|
139
|
-
e1 = :len + :sd + 5 + R.c(1, 2, 3, 4)
|
|
140
|
-
expect(e1.to_s).to eq "len + sd + 5L + 1:4"
|
|
141
|
-
expect(e1.class).to eq R::Language
|
|
142
|
-
expect(e1.rclass).to eq "integer"
|
|
143
|
-
expect(e1.eval).to eq R.c(36, 37, 38, 39)
|
|
144
|
-
expect(e1.eval).not_to eq R.c(35, 37, 38, 39)
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
it "should create assignment expressions with method 'assign'" do
|
|
148
|
-
e = :x.assign :vec * 10
|
|
149
|
-
expect(e.to_s).to eq "x <- vec * 10L"
|
|
150
|
-
expect(e.eval).to eq R.c(10, 20, 30, 40)
|
|
151
|
-
expect(~:x).to eq R.c(10, 20, 30, 40)
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
it "should create quoted functions with 'E'" do
|
|
155
|
-
exp = E.sin(:vec)
|
|
156
|
-
expect(exp.to_s).to eq "sin(vec)"
|
|
157
|
-
expect(exp.eval.
|
|
158
|
-
all__equal R.c(0.841470984, 0.909297426, 0.141120008, -0.756802495)).to eq true
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
it "should require quoted expression to convert expression to string with 'as_string'" do
|
|
162
|
-
exp = E.expr(:len)
|
|
163
|
-
expect(exp.to_s).to eq "expr(len)"
|
|
164
|
-
expect(exp.as_string).to eq "len"
|
|
165
|
-
expect(exp.is__symbol).to eq true
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
it "should be possible to check if an expression is a call" do
|
|
169
|
-
exp = E.expr(E.sin(:x))
|
|
170
|
-
expect(exp.typeof).to eq "language"
|
|
171
|
-
expect(exp.typeof).not_to eq "matrix"
|
|
172
|
-
expect(exp.is__call).to eq true
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
it "should be able to subset a call as with lists" do
|
|
176
|
-
x = E.expr(E.read__table("important.csv", row__names: false))
|
|
177
|
-
expect(x.typeof).to eq "language"
|
|
178
|
-
expect(x.is__call).to eq true
|
|
179
|
-
expect(x[[1]].to_s).to eq "read.table"
|
|
180
|
-
expect(x[[2]]).to eq "important.csv"
|
|
181
|
-
expect(x[[3]]).to eq false
|
|
182
|
-
expect(x[["row.names"]]).to eq false
|
|
183
|
-
expect(x[["row.names"]]).not_to eq true
|
|
184
|
-
expect(x.length).to eq 3
|
|
185
|
-
# puts x.row__names # does not work yet
|
|
186
|
-
# puts x.call_standardise # does not work yet
|
|
187
|
-
# x.header = true # does not work yet
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
it "should allow constructing calls with 'call2'" do
|
|
191
|
-
e = R.call2("mean", x: E.expr(:x), na__rm: true)
|
|
192
|
-
expect(e.to_s).to eq "mean(x = x, na.rm = TRUE)"
|
|
193
|
-
|
|
194
|
-
#> mean(x = x, na.rm = TRUE)
|
|
195
|
-
# e = call2(E.base::mean, x: E.expr(:x), na__rm: TRUE) # does not work yet
|
|
196
|
-
# puts e
|
|
197
|
-
#> base::mean(x = x, na.rm = TRUE)
|
|
198
|
-
|
|
199
|
-
e = R.call2("<-", E.expr(:x), 10)
|
|
200
|
-
e.eval
|
|
201
|
-
expect(~:x).to eq 10
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
it "should allow executing a function with 'exec'" do
|
|
205
|
-
val = R.exec("mean", x: (1..10), na__rm: true, trim: 0.1)
|
|
206
|
-
expect(val).to eq 5.5
|
|
207
|
-
|
|
208
|
-
# using ruby arrays and * in place of !!!(list)
|
|
209
|
-
args = [x: (1..10), na__rm: true, trim: 0.1]
|
|
210
|
-
expect(R.exec("mean", *args)).to eq 5.5
|
|
211
|
-
|
|
212
|
-
# using ruby arrays and parameter in the function call. Note however
|
|
213
|
-
# that according to Ruby's rule, the array must come before the hash
|
|
214
|
-
# so R.exec("mean", x: (1..10), *params) is a syntax error
|
|
215
|
-
params = [na__rm: true, trim: 0.1]
|
|
216
|
-
expect(R.exec("mean", *params, x: (1..10))).to eq 5.5
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
#========================================================================================
|
|
222
|
-
context "Expressions inside functions" do
|
|
223
|
-
|
|
224
|
-
it "should allow the use of expression in quoted functions" do
|
|
225
|
-
x = y = R.seq(-~:pi, ~:pi, length: 10)
|
|
226
|
-
df = R.data__frame(x: x, y: y)
|
|
227
|
-
|
|
228
|
-
# quote the outer function
|
|
229
|
-
e = E.outer(:x, :y, lambda { |x, y| R.cos(y) / (1 + x**2) })
|
|
230
|
-
|
|
231
|
-
# evaluate the expression in the scope of a data frame
|
|
232
|
-
res = e.eval(df)
|
|
233
|
-
expect(res.rclass).to eq "matrix"
|
|
234
|
-
expect(res[1, 1].all__equal -0.091999668).to eq true
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
it "should be able to pass an expression to a 'subset'" do
|
|
238
|
-
df = R.data__frame(a: (1..5), b: (5..1), c: R.c(5, 3, 1, 4, 1))
|
|
239
|
-
|
|
240
|
-
sub = R.subset(df, (:a.eq :b))
|
|
241
|
-
expect(sub.rclass).to eq "data.frame"
|
|
242
|
-
expect(sub[1, 1]).to eq 3
|
|
243
|
-
|
|
244
|
-
sub = R.subset(df, :a >= 4)
|
|
245
|
-
expect(sub.nrow).to eq 2
|
|
246
|
-
expect(sub.ncol).to eq 3
|
|
247
|
-
expect(sub[1, 1]).to eq 4
|
|
248
|
-
expect(sub[1, 3]).to eq 4
|
|
249
|
-
expect(sub[2, 2]).to eq 1
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
#========================================================================================
|
|
255
|
-
context "Evaluate data in the context of the ruby instance" do
|
|
256
|
-
|
|
257
|
-
before(:each) do
|
|
258
|
-
@df = R.data__frame(a: (1..5), b: (5..1), c: R.c(5, 3, 1, 4, 1))
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
it "should access columns of the data frame by name" do
|
|
262
|
-
# Note that we use {a} and not {:a}. In the context of the @df
|
|
263
|
-
# object 'a' is a call to the method that returns column 'a'
|
|
264
|
-
expect(@df.instance_eval {a}).to eq R.c(1, 2, 3, 4, 5)
|
|
265
|
-
expect(@df.instance_eval {b}).to eq R.c(5, 4, 3, 2, 1)
|
|
266
|
-
expect(@df.instance_eval {c}).to eq R.c(5, 3, 1, 4, 1)
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
it "should evaluate the expression in the given instance" do
|
|
270
|
-
# Ruby way of evaluation code in the scope of an object.
|
|
271
|
-
val = @df.instance_eval {a.eql 4}
|
|
272
|
-
expect(val).to eq R.c(false, false, false, true, false)
|
|
273
|
-
|
|
274
|
-
val = @df.instance_eval {a >= 3}
|
|
275
|
-
expect(val).to eq R.c(false, false, true, true, true)
|
|
276
|
-
|
|
277
|
-
val = @df.instance_eval {a.eql b}
|
|
278
|
-
expect(val).to eq R.c(false, false, true, false, false)
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
#========================================================================================
|
|
285
|
-
context "Tidyverse evaluation" do
|
|
286
|
-
|
|
287
|
-
it "should allow passing expressions to ggplot" do
|
|
288
|
-
require 'ggplot'
|
|
289
|
-
|
|
290
|
-
# df is a Ruby symbol and ToothGrowth is an R dataframe. But at this point
|
|
291
|
-
# there is no relationship between the two
|
|
292
|
-
df = ~:ToothGrowth
|
|
293
|
-
dose = df.dose
|
|
294
|
-
dose = dose.as__factor
|
|
295
|
-
|
|
296
|
-
df2 = R.data__frame(
|
|
297
|
-
R.aggregate(df.len, by: R.list(dose), FUN: :mean),
|
|
298
|
-
R.aggregate(df.len, by: R.list(dose), FUN: :sd)[2]
|
|
299
|
-
)
|
|
300
|
-
|
|
301
|
-
df2.names = R.c("dose", "len", "sd")
|
|
302
|
-
|
|
303
|
-
# pass the expressions ':len - :sd' and ':len + :sd' to the aes function
|
|
304
|
-
f = df2.ggplot(E.aes(x: :dose, y: :len,
|
|
305
|
-
ymin: :len - :sd,
|
|
306
|
-
ymax: :len + :sd))
|
|
307
|
-
|
|
308
|
-
# create the graphics and saves it
|
|
309
|
-
R.png("specs/figures/dose_len.png")
|
|
310
|
-
puts f + R.geom_crossbar
|
|
311
|
-
R.dev__off
|
|
312
|
-
end
|
|
313
|
-
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
end
|