From cbf2131a488660fe7cdd29d1b7a9d04bc2b779a6 Mon Sep 17 00:00:00 2001 From: rsquaredin Date: Thu, 24 Jan 2019 18:11:59 +0530 Subject: [PATCH 1/3] option to update package --- R/zzz.R | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/R/zzz.R b/R/zzz.R index 763e408..bff935f 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -21,10 +21,16 @@ tip <- sample(tips, 1) - if (behind_cran) { - packageStartupMessage("A new version of vistributions (0.2.0) is available with bug fixes and new features.") - } else { - packageStartupMessage(paste(strwrap(tip), collapse = "\n")) + if (interactive()) { + if (behind_cran) { + msg <- message("A new version of vistributions is available with bug fixes and new features.") + message(msg, "\nWould you like to install it?") + if (utils::menu(c("Yes", "No")) == 1) { + utils::update.packages("vistributions") + } + } else { + packageStartupMessage(paste(strwrap(tip), collapse = "\n")) + } } } From 63ee583a921fa6445889e77f31b4345d119f60b8 Mon Sep 17 00:00:00 2001 From: rsquaredin Date: Thu, 7 Mar 2019 15:34:44 +0530 Subject: [PATCH 2/3] prep for cran release --- DESCRIPTION | 12 +- NAMESPACE | 1 + NEWS.md | 4 + R/vdist-app.R | 7 +- R/zzz.R | 7 +- cran-comments.md | 7 +- docs/index.html | 12 +- inst/application/logic/logic_binom.R | 17 + inst/application/logic/logic_chisq.R | 11 + inst/application/logic/logic_exit_button.R | 6 + inst/application/logic/logic_f.R | 11 + inst/application/logic/logic_home.R | 536 +++++++++++++++++++++ inst/application/logic/logic_norm.R | 11 + inst/application/logic/logic_t.R | 11 + inst/application/mystyle.css | 46 ++ inst/application/server.R | 18 + inst/application/styles.css | 14 + inst/application/ui.R | 12 + inst/application/ui/ui_analyze.R | 5 + inst/application/ui/ui_binom.R | 100 ++++ inst/application/ui/ui_chisq.R | 87 ++++ inst/application/ui/ui_dist.R | 14 + inst/application/ui/ui_dist_home.R | 120 +++++ inst/application/ui/ui_exit_button.R | 15 + inst/application/ui/ui_f.R | 95 ++++ inst/application/ui/ui_homes.R | 9 + inst/application/ui/ui_normal.R | 81 ++++ inst/application/ui/ui_t.R | 79 +++ inst/application/www/normal.png | Bin 0 -> 8246 bytes inst/application/www/summary1.png | Bin 0 -> 30285 bytes man/vdist_launch_app.Rd | 2 +- 31 files changed, 1332 insertions(+), 18 deletions(-) create mode 100644 inst/application/logic/logic_binom.R create mode 100644 inst/application/logic/logic_chisq.R create mode 100644 inst/application/logic/logic_exit_button.R create mode 100644 inst/application/logic/logic_f.R create mode 100644 inst/application/logic/logic_home.R create mode 100644 inst/application/logic/logic_norm.R create mode 100644 inst/application/logic/logic_t.R create mode 100644 inst/application/mystyle.css create mode 100644 inst/application/server.R create mode 100644 inst/application/styles.css create mode 100644 inst/application/ui.R create mode 100644 inst/application/ui/ui_analyze.R create mode 100644 inst/application/ui/ui_binom.R create mode 100644 inst/application/ui/ui_chisq.R create mode 100644 inst/application/ui/ui_dist.R create mode 100644 inst/application/ui/ui_dist_home.R create mode 100644 inst/application/ui/ui_exit_button.R create mode 100644 inst/application/ui/ui_f.R create mode 100644 inst/application/ui/ui_homes.R create mode 100644 inst/application/ui/ui_normal.R create mode 100644 inst/application/ui/ui_t.R create mode 100644 inst/application/www/normal.png create mode 100644 inst/application/www/summary1.png diff --git a/DESCRIPTION b/DESCRIPTION index cb6e96d..75670be 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: vistributions Type: Package Title: Visualize Probability Distributions -Version: 0.1.0.9000 +Version: 0.1.1 Authors@R: person("Aravind", "Hebbali", email = "hebbali.aravind@gmail.com", role = c("aut", "cre")) Description: Visualize and compute percentiles/probabilities of normal, t, f, chi square and binomial distributions. @@ -9,13 +9,17 @@ Depends: R(>= 3.1) Imports: ggplot2, + magrittr, + shiny, stats, - utils, - xplorerr + utils Suggests: testthat, knitr, - rmarkdown + rmarkdown, + shinyBS, + shinycssloaders, + shinythemes License: MIT + file LICENSE URL: https://github.com/rsquaredacademy/vistributions, https://vistributions.rsquaredacademy.com BugReports: https://github.com/rsquaredacademy/vistributions/issues diff --git a/NAMESPACE b/NAMESPACE index a2f9111..c1a8f6b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -16,6 +16,7 @@ export(vdist_normal_prob) export(vdist_t_perc) export(vdist_t_plot) export(vdist_t_prob) +importFrom(magrittr,"%>%") importFrom(utils,install.packages) importFrom(utils,menu) importFrom(utils,packageVersion) diff --git a/NEWS.md b/NEWS.md index bee99bf..908b31f 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# vistributions 0.1.1 + +This is a patch release to fix bugs in the app. + # vistributions 0.1.0 * Added a `NEWS.md` file to track changes to the package. diff --git a/R/vdist-app.R b/R/vdist-app.R index 4ae8c75..1cf57ea 100644 --- a/R/vdist-app.R +++ b/R/vdist-app.R @@ -1,5 +1,5 @@ #' @title Launch shiny app -#' @description Launches shiny app for interactive model building. +#' @description Launches shiny app for visualizing distributions. #' @examples #' \dontrun{ #' vdist_launch_app () @@ -8,13 +8,10 @@ #' vdist_launch_app <- function() { - message("`vdist_launch_app ()` has been soft-deprecated and will be removed in the next release. In future, to launch the app, run the below code:\n - - install.packages('xplorerr')\n - xplorerr::app_vistributions()\n") - check_suggests('shinyBS') check_suggests('shinycssloaders') check_suggests('shinythemes') - xplorerr::app_vistributions() + shiny::runApp(appDir = system.file("application", package = "vistributions")) } \ No newline at end of file diff --git a/R/zzz.R b/R/zzz.R index bff935f..a639628 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -1,3 +1,4 @@ +#' @importFrom magrittr %>% .onAttach <- function(...) { if (!interactive() || stats::runif(1) > 0.1) return() @@ -6,7 +7,7 @@ cran_version <- pkgs %>% - extract("vistributions", "Version") %>% + magrittr::extract("vistributions", "Version") %>% package_version() local_version <- utils::packageVersion("vistributions") @@ -23,8 +24,8 @@ if (interactive()) { if (behind_cran) { - msg <- message("A new version of vistributions is available with bug fixes and new features.") - message(msg, "\nWould you like to install it?") + msg <- "A new version of vistributions is available with bug fixes and new features." + packageStartupMessage(msg, "\nWould you like to install it?") if (utils::menu(c("Yes", "No")) == 1) { utils::update.packages("vistributions") } diff --git a/cran-comments.md b/cran-comments.md index e7c3062..4b837cb 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,10 +1,9 @@ ## Test environments -* local Windows 10 install, R 3.5.1 -* ubuntu 14.04 (on travis-ci), R 3.5.1 +* local Windows 10, R 3.5.2 +* ubuntu 14.04 (on travis-ci), R 3.4.4, R 3.5.2, R devel * win-builder (devel and release) ## R CMD check results -0 errors | 0 warnings | 1 note +0 errors | 0 warnings | 0 note -* This is a new release. diff --git a/docs/index.html b/docs/index.html index 97b21f4..d828986 100644 --- a/docs/index.html +++ b/docs/index.html @@ -36,7 +36,17 @@ - + + + + diff --git a/inst/application/logic/logic_binom.R b/inst/application/logic/logic_binom.R new file mode 100644 index 0000000..f1f8fa0 --- /dev/null +++ b/inst/application/logic/logic_binom.R @@ -0,0 +1,17 @@ +output$binom_shape <- renderPlot({ + vdist_binom_plot(input$binom_n, input$binom_p) +}) + +output$bprob_plot <- renderPlot({ + if (input$bprob_tail != 'interval') { + vdist_binom_prob(input$bprob_n, input$bprob_p, input$bprob_s, input$bprob_tail) + } else { + vdist_binom_prob(input$bprob_n, input$bprob_p, + c(input$bprob_tail_1, input$bprob_tail_2), input$bprob_tail) + } + +}) + +output$bperc_plot <- renderPlot({ + vdist_binom_perc(input$bperc_n, input$bperc_p, input$bperc_tp, input$bperc_tail) +}) diff --git a/inst/application/logic/logic_chisq.R b/inst/application/logic/logic_chisq.R new file mode 100644 index 0000000..b24a431 --- /dev/null +++ b/inst/application/logic/logic_chisq.R @@ -0,0 +1,11 @@ +output$chisq_shape <- renderPlot({ + vdist_chisquare_plot(input$chisq_df, as.logical(input$chisq_norm)) +}) + +output$chiprob_plot <- renderPlot({ + vdist_chisquare_prob(input$chiprob_p, input$chiprob_df, input$chiprob_tail) +}) + +output$chiperc_plot <- renderPlot({ + print(vdist_chisquare_perc(input$chiperc_p, input$chiperc_df, input$chiperc_tail)) +}) diff --git a/inst/application/logic/logic_exit_button.R b/inst/application/logic/logic_exit_button.R new file mode 100644 index 0000000..4de203b --- /dev/null +++ b/inst/application/logic/logic_exit_button.R @@ -0,0 +1,6 @@ +# Exit --------------------------------------------------------------- +observe({ + if (isTRUE(input$mainpage == "exit")) { + stopApp() + } +}) diff --git a/inst/application/logic/logic_f.R b/inst/application/logic/logic_f.R new file mode 100644 index 0000000..208a154 --- /dev/null +++ b/inst/application/logic/logic_f.R @@ -0,0 +1,11 @@ +output$f_shape <- renderPlot({ + vdist_f_plot(input$f_numdf, input$f_dendf, as.logical(input$f_norm)) +}) + +output$fprob_plot <- renderPlot({ + vdist_f_prob(input$fprob_p, input$fprob_numdf, input$fprob_dendf, input$fprob_tail) +}) + +output$fperc_plot <- renderPlot({ + vdist_f_perc(input$fperc_p, input$fperc_numdf, input$fperc_dendf, input$fperc_tail) +}) diff --git a/inst/application/logic/logic_home.R b/inst/application/logic/logic_home.R new file mode 100644 index 0000000..3650441 --- /dev/null +++ b/inst/application/logic/logic_home.R @@ -0,0 +1,536 @@ +eda_menu <- eventReactive(input$finalok, { + + fluidRow( + + column(12), + + br(), + + column(12, align = 'center', + h5('What do you want to do?') + ), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Generate detailed descriptive statistics for a continuous variable: ') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_1', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Generate frequency distribution of a categorical variable: ') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_2', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Generate frequency distribution a continuous variable: ') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_3', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Generate two way table of categorical variables: ') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_4', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Generate multiple one way tables of categorical variables: ') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_5', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Generate multiple two way tables of categorical variables: ') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_6', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Generate grouped summary statistics: ') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_7', + label = 'Click Here', + width = '120px' + ) + ), + + column(3) + + ) + + + +}) + + +output$eda_options <- renderUI({ + eda_menu() +}) + +observeEvent(input$click_descriptive, { + updateNavbarPage(session, 'mainpage', selected = 'tab_home_analyze') + updateNavlistPanel(session, 'navlist_home', 'tab_eda_home') +}) + +observeEvent(input$click_distributions, { + updateNavbarPage(session, 'mainpage', selected = 'tab_home_analyze') + updateNavlistPanel(session, 'navlist_home', 'tab_dist_home') +}) + +observeEvent(input$click_inference, { + updateNavbarPage(session, 'mainpage', selected = 'tab_home_analyze') + updateNavlistPanel(session, 'navlist_home', 'tab_infer_home') +}) + +observeEvent(input$click_model, { + updateNavbarPage(session, 'mainpage', selected = 'tab_home_analyze') + updateNavlistPanel(session, 'navlist_home', 'tab_model_home') +}) + +observeEvent(input$click_visualize, { + updateNavbarPage(session, 'mainpage', selected = 'tab_viz_home') + updateNavlistPanel(session, 'navlist_vizmenu', 'tab_home_viz') +}) + +# observeEvent(input$click_visualize, { +# updateNavbarPage(session, 'mainpage', selected = 'tab_viz_lib') +# }) + +observeEvent(input$button_1, { + updateNavbarPage(session, 'mainpage', selected = 'tab_eda') + updateNavlistPanel(session, 'navlist_eda', 'tab_summary') +}) + +observeEvent(input$button_2, { + updateNavbarPage(session, 'mainpage', selected = 'tab_eda') + updateNavlistPanel(session, 'navlist_eda', 'tab_fqual') +}) + +observeEvent(input$button_3, { + updateNavbarPage(session, 'mainpage', selected = 'tab_eda') + updateNavlistPanel(session, 'navlist_eda', 'tab_fquant') +}) + +observeEvent(input$button_4, { + updateNavbarPage(session, 'mainpage', selected = 'tab_eda') + updateNavlistPanel(session, 'navlist_eda', 'tab_cross') +}) + +observeEvent(input$button_5, { + updateNavbarPage(session, 'mainpage', selected = 'tab_eda') + updateNavlistPanel(session, 'navlist_eda', 'tab_mult1') +}) + +observeEvent(input$button_6, { + updateNavbarPage(session, 'mainpage', selected = 'tab_eda') + updateNavlistPanel(session, 'navlist_eda', 'tab_mult2') +}) + +observeEvent(input$button_7, { + updateNavbarPage(session, 'mainpage', selected = 'tab_eda') + updateNavlistPanel(session, 'navlist_eda', 'tab_gsummary') +}) + +observeEvent(input$button_dist_home_1, { + updateNavbarPage(session, 'mainpage', selected = 'tab_dist') + updateNavlistPanel(session, 'navlist_dist', 'tab_norm') +}) + +observeEvent(input$button_dist_home_2, { + updateNavbarPage(session, 'mainpage', selected = 'tab_dist') + updateNavlistPanel(session, 'navlist_dist', 'tab_t') +}) + +observeEvent(input$button_dist_home_3, { + updateNavbarPage(session, 'mainpage', selected = 'tab_dist') + updateNavlistPanel(session, 'navlist_dist', 'tab_chisq') +}) + +observeEvent(input$button_dist_home_4, { + updateNavbarPage(session, 'mainpage', selected = 'tab_dist') + updateNavlistPanel(session, 'navlist_dist', 'tab_binom') +}) + +observeEvent(input$button_dist_home_5, { + updateNavbarPage(session, 'mainpage', selected = 'tab_dist') + updateNavlistPanel(session, 'navlist_dist', 'tab_f') +}) + + +observeEvent(input$button_infer_home_1, { + updateNavbarPage(session, 'mainpage', selected = 'tab_home_analyze') + updateNavlistPanel(session, 'navlist_home', 'tab_infer1_home') +}) + +observeEvent(input$button_infer_home_2, { + updateNavbarPage(session, 'mainpage', selected = 'tab_home_analyze') + updateNavlistPanel(session, 'navlist_home', 'tab_infer2_home') +}) + +observeEvent(input$button_infer_home_3, { + updateNavbarPage(session, 'mainpage', selected = 'tab_home_analyze') + updateNavlistPanel(session, 'navlist_home', 'tab_infer3_home') +}) + +# links for inferential statistics +observeEvent(input$inf_menu_1_t, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_ttest') +}) + +observeEvent(input$inf_menu_1_var, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_osvartest') +}) + +observeEvent(input$inf_menu_1_prop, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_osproptest') +}) + +observeEvent(input$inf_menu_1_chi, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_chigof') +}) + +observeEvent(input$inf_menu_1_runs, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_runs') +}) + +observeEvent(input$inf_menu_2_it, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_indttest') +}) + +observeEvent(input$inf_menu_2_pt, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_indttest') +}) + +observeEvent(input$inf_menu_2_binom, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_binomtest') +}) + +observeEvent(input$inf_menu_2_var, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_tsvartest') +}) + +observeEvent(input$inf_menu_2_prop, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_tsproptest') +}) + +observeEvent(input$inf_menu_2_chi, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_chict') +}) + +observeEvent(input$inf_menu_2_mcnemar, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_mcnemar') +}) + +observeEvent(input$inf_menu_3_anova, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_anova') +}) + +observeEvent(input$inf_menu_3_levene, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_levtest') +}) + +observeEvent(input$inf_menu_3_cochran, { + updateNavbarPage(session, 'mainpage', selected = 'tab_infer') + updateNavlistPanel(session, 'navlist_infer', 'tab_cochran') +}) + +## visulization links + +observeEvent(input$click_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_viz_home') + updateNavlistPanel(session, 'navlist_vizmenu', 'tab_viz_base') +}) + +observeEvent(input$click_ggplot2, { + updateNavbarPage(session, 'mainpage', selected = 'tab_viz_home') + updateNavlistPanel(session, 'navlist_vizmenu', 'tab_viz_gg') +}) + +observeEvent(input$click_prh, { + updateNavbarPage(session, 'mainpage', selected = 'tab_viz_home') + updateNavlistPanel(session, 'navlist_vizmenu', 'tab_viz_others') +}) + +## link viz libraries to tabs +observeEvent(input$click_bar_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_base') + updateNavlistPanel(session, 'navlist_base', 'tab_bar') +}) + +observeEvent(input$click_bar2_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_base') + updateNavlistPanel(session, 'navlist_base', 'tab_bar2') +}) + +observeEvent(input$click_box_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_base') + updateNavlistPanel(session, 'navlist_base', 'tab_box') +}) + +observeEvent(input$click_box2_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_base') + updateNavlistPanel(session, 'navlist_base', 'tab_box2') +}) + +observeEvent(input$click_line_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_base') + updateNavlistPanel(session, 'navlist_base', 'tab_line') +}) + +observeEvent(input$click_scatter_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_base') + updateNavlistPanel(session, 'navlist_base', 'tab_scatter') +}) + +observeEvent(input$click_hist_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_base') + updateNavlistPanel(session, 'navlist_base', 'tab_hist') +}) + +observeEvent(input$click_pie_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_base') + updateNavlistPanel(session, 'navlist_base', 'tab_pie') +}) + +observeEvent(input$click_pie2_base, { + updateNavbarPage(session, 'mainpage', selected = 'tab_base') + updateNavlistPanel(session, 'navlist_base', 'tab_pie3d') +}) + + +## ggplot2 +observeEvent(input$click_bar_gg, { + updateNavbarPage(session, 'mainpage', selected = 'tab_gg') + updateNavlistPanel(session, 'navlist_gg', 'tab_gbar') +}) + +observeEvent(input$click_bar2_gg, { + updateNavbarPage(session, 'mainpage', selected = 'tab_gg') + updateNavlistPanel(session, 'navlist_gg', 'tab_gbar2') +}) + +observeEvent(input$click_box_gg, { + updateNavbarPage(session, 'mainpage', selected = 'tab_gg') + updateNavlistPanel(session, 'navlist_gg', 'tab_gbox') +}) + +observeEvent(input$click_box2_gg, { + updateNavbarPage(session, 'mainpage', selected = 'tab_gg') + updateNavlistPanel(session, 'navlist_gg', 'tab_gbox2') +}) + +observeEvent(input$click_line_gg, { + updateNavbarPage(session, 'mainpage', selected = 'tab_gg') + updateNavlistPanel(session, 'navlist_gg', 'tab_gline1') +}) + +observeEvent(input$click_scatter_gg, { + updateNavbarPage(session, 'mainpage', selected = 'tab_gg') + updateNavlistPanel(session, 'navlist_gg', 'tab_gscatter') +}) + +observeEvent(input$click_hist_gg, { + updateNavbarPage(session, 'mainpage', selected = 'tab_gg') + updateNavlistPanel(session, 'navlist_gg', 'tab_ghist') +}) + +observeEvent(input$click_pie_gg, { + updateNavbarPage(session, 'mainpage', selected = 'tab_gg') + updateNavlistPanel(session, 'navlist_gg', 'tab_gpie') +}) + +observeEvent(input$click_line2_gg, { + updateNavbarPage(session, 'mainpage', selected = 'tab_gg') + updateNavlistPanel(session, 'navlist_gg', 'tab_gline2') +}) + + +## others +observeEvent(input$click_bar_others, { + updateNavbarPage(session, 'mainpage', selected = 'tab_others') + updateNavlistPanel(session, 'navlist_others', 'tab_bar_plot_1') +}) + +observeEvent(input$click_bar2_others, { + updateNavbarPage(session, 'mainpage', selected = 'tab_others') + updateNavlistPanel(session, 'navlist_others', 'tab_bar_plot_2') +}) + +observeEvent(input$click_box_others, { + updateNavbarPage(session, 'mainpage', selected = 'tab_others') + updateNavlistPanel(session, 'navlist_others', 'tab_box_plot_1') +}) + +observeEvent(input$click_box2_others, { + updateNavbarPage(session, 'mainpage', selected = 'tab_others') + updateNavlistPanel(session, 'navlist_others', 'tab_box_plot_2') +}) + +observeEvent(input$click_line_others, { + updateNavbarPage(session, 'mainpage', selected = 'tab_others') + updateNavlistPanel(session, 'navlist_others', 'tab_line_prh') +}) + +observeEvent(input$click_scatter_others, { + updateNavbarPage(session, 'mainpage', selected = 'tab_others') + updateNavlistPanel(session, 'navlist_others', 'tab_scatter_prh') +}) + +observeEvent(input$click_hist_others, { + updateNavbarPage(session, 'mainpage', selected = 'tab_others') + updateNavlistPanel(session, 'navlist_others', 'tab_hist_prh') +}) + +observeEvent(input$click_pie_others, { + updateNavbarPage(session, 'mainpage', selected = 'tab_others') + updateNavlistPanel(session, 'navlist_others', 'tab_pie_prh') +}) + +## model links +observeEvent(input$model_reg_click, { + updateNavbarPage(session, 'mainpage', selected = 'tab_reg') + updateNavlistPanel(session, 'navlist_reg', 'tab_regress') +}) + +observeEvent(input$model_varsel_click, { + updateNavbarPage(session, 'mainpage', selected = 'tab_reg') + updateNavlistPanel(session, 'navlist_reg', 'tab_var_select') +}) + +observeEvent(input$model_resdiag_click, { + updateNavbarPage(session, 'mainpage', selected = 'tab_reg') + updateNavlistPanel(session, 'navlist_reg', 'tab_res_diag') +}) + +observeEvent(input$model_het_click, { + updateNavbarPage(session, 'mainpage', selected = 'tab_reg') + updateNavlistPanel(session, 'navlist_reg', 'tab_hetero') +}) + +observeEvent(input$model_coldiag_click, { + updateNavbarPage(session, 'mainpage', selected = 'tab_reg') + updateNavlistPanel(session, 'navlist_reg', 'tab_regcollin') +}) + +observeEvent(input$model_infl_click, { + updateNavbarPage(session, 'mainpage', selected = 'tab_reg') + updateNavlistPanel(session, 'navlist_reg', 'tab_inflobs') +}) + +observeEvent(input$model_fit_click, { + updateNavbarPage(session, 'mainpage', selected = 'tab_reg') + updateNavlistPanel(session, 'navlist_reg', 'tab_mfit') +}) + +observeEvent(input$model_varcontrib_click, { + updateNavbarPage(session, 'mainpage', selected = 'tab_reg') + updateNavlistPanel(session, 'navlist_reg', 'tab_regvarcont') +}) diff --git a/inst/application/logic/logic_norm.R b/inst/application/logic/logic_norm.R new file mode 100644 index 0000000..10f5a4b --- /dev/null +++ b/inst/application/logic/logic_norm.R @@ -0,0 +1,11 @@ +output$norm_shape <- renderPlot({ + vdist_normal_plot(input$norm_m, input$norm_sd) +}) + +output$nprob_plot <- renderPlot({ + vdist_normal_prob(input$nprob_p, input$nprob_m, input$nprob_sd, input$nprob_tail) +}) + +output$nperc_plot <- renderPlot({ + vdist_normal_perc(input$nperc_p, input$nperc_m, input$nperc_sd, input$nperc_tail) +}) diff --git a/inst/application/logic/logic_t.R b/inst/application/logic/logic_t.R new file mode 100644 index 0000000..6733262 --- /dev/null +++ b/inst/application/logic/logic_t.R @@ -0,0 +1,11 @@ +output$t_shape <- renderPlot({ + vdist_t_plot(input$t_df) +}) + +output$tprob_plot <- renderPlot({ + vdist_t_prob(input$tprob_p, input$tprob_df, input$tprob_tail) +}) + +output$tperc_plot <- renderPlot({ + vdist_t_perc(input$tperc_p, input$tperc_df, input$tperc_tail) +}) diff --git a/inst/application/mystyle.css b/inst/application/mystyle.css new file mode 100644 index 0000000..cbe3f31 --- /dev/null +++ b/inst/application/mystyle.css @@ -0,0 +1,46 @@ +/*.btn, .btn-default, .action-button { + color: white; + background: #007ba7; + border-radius: 10px; + font-style: italic +} +*/ + +.btn:hover { + color: white; + background: #007ba7; + font-style: italic +} + + +.btn-default:hover { + color: white; + background: #007ba7; + font-style: italic +} + + +.action-button:hover { + color: white; + background: #007ba7; + font-style: italic +} + +h3 { + text-align:center; +} + +#screener { + background-color:white; + border-color:white; +} + +.shiny-text-output { + background-color:white; + border-color:white; +} + + .tab-pane .active a{ + background-color:white; + border-color:white; + } \ No newline at end of file diff --git a/inst/application/server.R b/inst/application/server.R new file mode 100644 index 0000000..3e0b271 --- /dev/null +++ b/inst/application/server.R @@ -0,0 +1,18 @@ +library(vistributions) +library(tibble) +library(magrittr) +library(ggplot2) + +shinyServer(function(input, output, session) { + + source("logic/logic_binom.R", local = T) + source("logic/logic_f.R", local = T) + source("logic/logic_t.R", local = T) + source("logic/logic_norm.R", local = T) + source("logic/logic_chisq.R", local = T) + source("logic/logic_home.R", local = T) + source("logic/logic_exit_button.R", local = T) + +}) + + diff --git a/inst/application/styles.css b/inst/application/styles.css new file mode 100644 index 0000000..4d84716 --- /dev/null +++ b/inst/application/styles.css @@ -0,0 +1,14 @@ +h3 { + text-align:center; +} + +#screener { + background-color:white; + border-color:white; +} + +.shiny-text-output { + background-color:white; + border-color:white; +} + diff --git a/inst/application/ui.R b/inst/application/ui.R new file mode 100644 index 0000000..54b201b --- /dev/null +++ b/inst/application/ui.R @@ -0,0 +1,12 @@ +library(shiny) +library(shinyBS) +library(shinythemes) +library(magrittr) + +shinyUI( + + navbarPage(HTML("vistributions"), id = 'mainpage', + + source('ui/ui_analyze.R', local = TRUE)[[1]], + source('ui/ui_exit_button.R', local = TRUE)[[1]] +)) diff --git a/inst/application/ui/ui_analyze.R b/inst/application/ui/ui_analyze.R new file mode 100644 index 0000000..fe8e589 --- /dev/null +++ b/inst/application/ui/ui_analyze.R @@ -0,0 +1,5 @@ +navbarMenu('Visualize', icon = icon('search-plus'), + source('ui/ui_homes.R', local = TRUE)[[1]], + source('ui/ui_dist.R', local = TRUE)[[1]] + +) diff --git a/inst/application/ui/ui_binom.R b/inst/application/ui/ui_binom.R new file mode 100644 index 0000000..8d0e115 --- /dev/null +++ b/inst/application/ui/ui_binom.R @@ -0,0 +1,100 @@ +tabPanel('Binomial Distribution', value = 'tab_binom', + + fluidPage( + fluidRow( + column(12, + fluidRow( + column(8, align = 'left', + h4('Binomial Distribution'), + p('Visualize how changes in number of trials and the probability of + success affect the shape of the binomial distribution. + Compute/visualize probability from a given quantile and quantiles + out of given probability.') + ), + column(4, align = 'right', + actionButton(inputId='binomdist1', label="Help", icon = icon("question-circle"), + onclick ="window.open('https://descriptr.rsquaredacademy.com/reference/dist_binom_plot.html', '_blank')") + ) + ), + hr(), + tabsetPanel(type = 'tabs', + tabPanel('Distribution Shape', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('binom_n', 'Number of trials', value = 10, min = 1, + step = 1 + ), + numericInput('binom_p', 'Probability', value = 0.3, min = 0, + max = 1, step = 0.01 + ) + ) + ), + column(8, + plotOutput('binom_shape', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Probability', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('bprob_n', 'Number of trials', value = 10, min = 1, + step = 1 + ), + numericInput('bprob_p', 'Probability', value = 0.3, min = 0, + max = 1, step = 0.01 + ), + selectInput('bprob_tail', 'Tail', + choices = c('lower', 'upper', 'exact', 'interval'), + selected = 'lower' + ), + conditionalPanel( + condition = "input.bprob_tail != 'interval'", + numericInput('bprob_s', 'Success', value = 1, min = 0, step = 1) + ), + conditionalPanel( + condition = "input.bprob_tail == 'interval'", + numericInput('bprob_tail_1', 'Lower', value = 1, min = 0, step = 1), + br(), + numericInput('bprob_tail_2', 'Upper', value = 1, min = 0, step = 1) + ) + ) + ), + column(8, + plotOutput('bprob_plot', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Percentile', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('bperc_n', 'Number of trials', value = 10, min = 1, + step = 1 + ), + numericInput('bperc_p', 'Probability of Success', value = 0.3, + min = 0, max = 1, step = 0.01 + ), + numericInput('bperc_tp', 'Aggregated Probability', value = 0.05, + min = 0, max = 0.5, step = 0.01 + ), + selectInput('bperc_tail', 'Tail', + choices = c('lower', 'upper'), selected = 'lower' + ) + ) + ), + column(8, + plotOutput('bperc_plot', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ) + ) + ) + ) + ) + +) diff --git a/inst/application/ui/ui_chisq.R b/inst/application/ui/ui_chisq.R new file mode 100644 index 0000000..c2b89c3 --- /dev/null +++ b/inst/application/ui/ui_chisq.R @@ -0,0 +1,87 @@ +tabPanel('Chisquare Distribution', value = 'tab_chisq', + + fluidPage( + fluidRow( + column(8, align = 'left', + h4('Chi Square Distribution'), + p('Visualize how changes in degrees of freedom affect the shape of the + chi square distribution. Compute/visualize quantiles out of given + probability and probability from a given quantile.') + + ), + column(4, align = 'right', + actionButton(inputId='chidistlink1', label="Help", icon = icon("question-circle"), + onclick ="window.open('https://descriptr.rsquaredacademy.com/reference/dist_chi_plot.html', '_blank')") + ) + ), + hr(), + fluidRow( + column(12, + tabsetPanel(type = 'tabs', + tabPanel('Distribution Shape', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('chisq_df', 'Degrees of freedom', value = 4, + min = 1, step = 1 + ), + selectInput('chisq_norm', 'Normal Distribution', + choices = c('TRUE' = TRUE, 'FALSE' = FALSE), + selected = 'FALSE' + ) + ) + ), + column(8, + plotOutput('chisq_shape', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Probability', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('chiprob_p', 'Percentile', value = 2, + min = 0, step = 1 + ), + numericInput('chiprob_df', 'Degrees of freedom', value = 4, + min = 1, step = 1 + ), + selectInput('chiprob_tail', 'Tail', + choices = c('lower', 'upper'), selected = 'lower' + ) + ) + ), + column(8, + plotOutput('chiprob_plot', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Percentile', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('chiperc_p', 'Probability', value = 0.3, min = 0, + step = 0.01, max = 1 + ), + numericInput('chiperc_df', 'Degrees of freedom', value = 4, + min = 1, step = 1 + ), + selectInput('chiperc_tail', 'Tail', + choices = c('lower', 'upper'), selected = 'lower' + ) + ) + ), + column(8, + plotOutput('chiperc_plot', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ) + ) + ) + ) + ) + +) diff --git a/inst/application/ui/ui_dist.R b/inst/application/ui/ui_dist.R new file mode 100644 index 0000000..50af57b --- /dev/null +++ b/inst/application/ui/ui_dist.R @@ -0,0 +1,14 @@ +tabPanel('Distributions', value = 'tab_dist', icon = icon('area-chart'), + + navlistPanel(id = 'navlist_dist', + well = FALSE, + widths = c(2, 10), + + source('ui/ui_normal.R', local = TRUE)[[1]], + source('ui/ui_t.R', local = TRUE)[[1]], + source('ui/ui_chisq.R', local = TRUE)[[1]], + source('ui/ui_binom.R', local = TRUE)[[1]], + source('ui/ui_f.R', local = TRUE)[[1]] + + ) +) \ No newline at end of file diff --git a/inst/application/ui/ui_dist_home.R b/inst/application/ui/ui_dist_home.R new file mode 100644 index 0000000..a7b74bc --- /dev/null +++ b/inst/application/ui/ui_dist_home.R @@ -0,0 +1,120 @@ +tabPanel('Distributions', value = 'tab_dist_home', + + fluidPage(theme = shinytheme('cerulean'), + + includeCSS("mystyle.css"), + + fluidRow( + + column(12), + + br(), + + column(12, align = 'center', + h5('Visualize Probability Distributions') + ), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Normal Distribution') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_dist_home_1', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('t Distribution') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_dist_home_2', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Chi Square Distribution') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_dist_home_3', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('Binomial Distribution') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_dist_home_4', + label = 'Click Here', + width = '120px' + ) + ), + + column(3), + + br(), + br(), + br(), + + column(3), + + column(4, align = 'left', + h5('F Distribution') + ), + + column(2, align = 'left', + actionButton( + inputId = 'button_dist_home_5', + label = 'Click Here', + width = '120px' + ) + ), + + column(3) + + ) + + ) +) \ No newline at end of file diff --git a/inst/application/ui/ui_exit_button.R b/inst/application/ui/ui_exit_button.R new file mode 100644 index 0000000..f7b9346 --- /dev/null +++ b/inst/application/ui/ui_exit_button.R @@ -0,0 +1,15 @@ +# Exit ----------------------------------------------------------- +tabPanel("", value = "exit", icon = icon("power-off"), + br(), + br(), + br(), + br(), + br(), + br(), + # In case window does not close, one should see this message + fluidRow(column(3), + column(6, h2("Thank you for using", strong("vistributions"), "!"))), + fluidRow(column(3), + column(6, h4("Now you should close this window."))) +) + diff --git a/inst/application/ui/ui_f.R b/inst/application/ui/ui_f.R new file mode 100644 index 0000000..cbc1b2d --- /dev/null +++ b/inst/application/ui/ui_f.R @@ -0,0 +1,95 @@ +tabPanel('F Distribution', value = 'tab_f', + + fluidPage( + fluidRow( + column(7, align = 'left', + h4('F Distribution'), + p('Visualize how changes in degrees of freedom affect the shape of the F + distribution. Compute/visualize quantiles out of given probability and + probability from a given quantile.') + ), + column(5, align = 'right', + actionButton(inputId='fdistlink1', label="Help", icon = icon("question-circle"), + onclick ="window.open('https://descriptr.rsquaredacademy.com/reference/dist_f_plot.html', '_blank')") + ) + ), + hr(), + fluidRow( + column(12, + tabsetPanel(type = 'tabs', + tabPanel('Distribution Shape', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('f_numdf', 'Numerator Degrees of freedom', + value = 4, min = 1, step = 1 + ), + numericInput('f_dendf', 'Denominator Degrees of freedom', + value = 5, min = 1, step = 1 + ), + selectInput('f_norm', 'Normal Distribution', + choices = c('TRUE' = TRUE, 'FALSE' = FALSE), + selected = 'FALSE' + ) + ) + ), + column(8, + plotOutput('f_shape', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Probability', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('fprob_p', 'Percentile', value = 2, + min = 0, step = 1 + ), + numericInput('fprob_numdf', 'Numerator Degrees of freedom', + value = 4, min = 1, step = 1 + ), + numericInput('fprob_dendf', 'Denominator Degrees of freedom', + value = 5, min = 1, step = 1 + ), + selectInput('fprob_tail', 'Tail', + choices = c('lower', 'upper'), selected = 'lower' + ) + ) + ), + column(8, + plotOutput('fprob_plot', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Percentile', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('fperc_p', 'Probability', value = 0.3, min = 0, + step = 0.01, max = 1 + ), + numericInput('fperc_numdf', 'Numerator Degrees of freedom', + value = 4, min = 1, step = 1 + ), + numericInput('fperc_dendf', 'Denominator Degrees of freedom', + value = 5, min = 1, step = 1 + ), + selectInput('fperc_tail', 'Tail', + choices = c('lower', 'upper'), selected = 'lower' + ) + ) + ), + column(8, + plotOutput('fperc_plot', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ) + ) + ) + ) + ) + +) diff --git a/inst/application/ui/ui_homes.R b/inst/application/ui/ui_homes.R new file mode 100644 index 0000000..7087c37 --- /dev/null +++ b/inst/application/ui/ui_homes.R @@ -0,0 +1,9 @@ +tabPanel('Home', value = 'tab_home_analyze', icon = icon('home'), + + navlistPanel(id = 'navlist_home', + well = FALSE, + widths = c(2, 10), + + source('ui/ui_dist_home.R', local = TRUE)[[1]] + ) +) \ No newline at end of file diff --git a/inst/application/ui/ui_normal.R b/inst/application/ui/ui_normal.R new file mode 100644 index 0000000..d8e8f2c --- /dev/null +++ b/inst/application/ui/ui_normal.R @@ -0,0 +1,81 @@ +tabPanel('Normal Distribution', value = 'tab_norm', + + fluidPage( + fluidRow( + column(8, align = 'left', + h4('Normal Distribution'), + p('Visualize how changes in mean and standard deviation affect the shape + of the normal distribution. Compute/visualize quantiles out of given + probability and probability from a given quantile.') + ), + column(4, align = 'right', + actionButton(inputId='ndistlink1', label="Help", icon = icon("question-circle"), + onclick ="window.open('https://descriptr.rsquaredacademy.com/reference/dist_norm_plot.html', '_blank')") + ) + ), + hr(), + fluidRow( + column(12, + tabsetPanel(type = 'tabs', + tabPanel('Distribution Shape', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('norm_m', 'Mean', value = 0, step = 0.1), + numericInput('norm_sd', 'Standard Deviation', value = 1, + min = 0, step = 0.1) + ) + ), + column(8, + plotOutput('norm_shape', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Probability', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('nprob_p', 'Percentile', value = 2, min = 0, + step = 1), + numericInput('nprob_m', 'Mean', value = 0, step = 0.1), + numericInput('nprob_sd', 'Standard Deviation', value = 1, + min = 0, step = 0.1), + selectInput('nprob_tail', 'Tail', + choices = c('lower', 'upper'), selected = 'lower' + ) + ) + ), + column(8, + plotOutput('nprob_plot', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Percentile', + column(4, + column(6, align = 'center', + br(), + br(), + numericInput('nperc_p', 'Probability', value = 0.3, min = 0, + step = 0.01, max = 1 + ), + numericInput('nperc_m', 'Mean', value = 0, step = 0.1), + numericInput('nperc_sd', 'Standard Deviation', value = 1, + min = 0, step = 0.1), + selectInput('nperc_tail', 'Tail', + choices = c('lower', 'upper'), selected = 'lower' + ) + ) + ), + column(8, + plotOutput('nperc_plot', height = '400px') %>% + shinycssloaders::withSpinner() + ) + ) + ) + ) + ) + ) + +) diff --git a/inst/application/ui/ui_t.R b/inst/application/ui/ui_t.R new file mode 100644 index 0000000..34a9c72 --- /dev/null +++ b/inst/application/ui/ui_t.R @@ -0,0 +1,79 @@ +tabPanel('t Distribution', value = 'tab_t', + + fluidPage( + fluidRow( + column(6, align = 'left', + h4('t Distribution'), + p('Visualize how degrees of freedom affect the shape of t distribution. Compute/visualize quantiles out of given probability and probability + from a given quantile.') + ), + column(6, align = 'right', + actionButton(inputId='tdistlink1', label="Help", icon = icon("question-circle"), + onclick ="window.open('https://descriptr.rsquaredacademy.com/reference/dist_t_plot.html', '_blank')") + ) + ), + hr(), + fluidRow( + column(12, + tabsetPanel(type = 'tabs', + tabPanel('Distribution Shape', + column(2, + column(12, align = 'center', + br(), + br(), + numericInput('t_df', 'Degrees of Freedom', value = 1, + min = 0, step = 1) + ) + ), + column(10, + plotOutput('t_shape', height = '500px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Probability', + column(2, + column(12, align = 'center', + br(), + br(), + numericInput('tprob_p', 'Percentile', value = 2, min = 0, + step = 1), + numericInput('tprob_df', 'Degrees of Freedom', value = 1, + min = 0, step = 1), + selectInput('tprob_tail', 'Tail', + choices = c('lower', 'upper', 'interval', 'both'), + selected = 'lower' + ) + ) + ), + column(10, + plotOutput('tprob_plot', height = '500px') %>% + shinycssloaders::withSpinner() + ) + ), + tabPanel('Find Percentile', + column(2, + column(12, align = 'center', + br(), + br(), + numericInput('tperc_p', 'Probability', value = 0.3, min = 0, + step = 0.01, max = 1 + ), + numericInput('tperc_df', 'Degrees of Freedom', value = 1, + min = 0, step = 1), + selectInput('tperc_tail', 'Tail', + choices = c('lower', 'upper', 'both'), + selected = 'lower' + ) + ) + ), + column(10, + plotOutput('tperc_plot', height = '500px') %>% + shinycssloaders::withSpinner() + ) + ) + ) + ) + ) + ) + +) diff --git a/inst/application/www/normal.png b/inst/application/www/normal.png new file mode 100644 index 0000000000000000000000000000000000000000..53f93e8550e707a9e9749878c59c4d6900cd18ec GIT binary patch literal 8246 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 literal 0 HcmV?d00001 diff --git a/inst/application/www/summary1.png b/inst/application/www/summary1.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc0988218b8e2211392e57a57f0a880e2c07880 GIT binary patch literal 30285 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 z�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 literal 0 HcmV?d00001 diff --git a/man/vdist_launch_app.Rd b/man/vdist_launch_app.Rd index 4f888d2..d626715 100644 --- a/man/vdist_launch_app.Rd +++ b/man/vdist_launch_app.Rd @@ -7,7 +7,7 @@ vdist_launch_app() } \description{ -Launches shiny app for interactive model building. +Launches shiny app for visualizing distributions. } \examples{ \dontrun{ From 6e07ce0edb8e366ce664a4906db0e50f6a699711 Mon Sep 17 00:00:00 2001 From: rsquaredin Date: Thu, 7 Mar 2019 17:16:46 +0530 Subject: [PATCH 3/3] do not treat warnings as errors --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c068fee..57acb88 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ language: r cache: packages dist: trusty -warnings_are_errors: true +warnings_are_errors: false sudo: false matrix: