I started playing with Shiny recently. I was trying to write something to demonstrate central limit theorem. my code is as follows:
ui.R:
#****************************************ui.R file code*****************************
library(shiny)
shinyUI(pageWithSidebar(headerPanel("Central Limit Theorem"),
sidebarPanel(selectInput("Distribution",
"Distribution:",
list("normal", "lognormal")),
br(),
sliderInput("sam_size",
"Sample size:",
min = 5,
max = 500,
value = 5)
),
mainPanel(tabPanel("Plot", plotOutput("plot")))
))
server.R:
#****************************************server.R file code**************************
library(shiny)
shinyServer(function(input, output){
data <- reactive(function(){Distribution <- switch(input$Distribution,
normal = rnorm,
lognormal = rlnorm,
rnorm
)
Distribution(input$sam_size*2000)})
output$plot <- reactive(function(){
Distribution <- input$Distribution
sam_size <- input$sam_size
temp <- matrix(data(), ncol=2000)
xbars <- colMeans(temp)
hist(xbars, main=paste("Sampling Distribution of the Mean Based on a", Distribution,
"distribution with n =", sam_size))})
})
When I tried to run the code using runApp()
, below is what I got. As you can see, the plot is not displayed.
The weird part is that, when I went back to my Rstudio, and pressed "Esc" to exit the app, the plot displayed in my Rstudio as shown below:
I wonder if anyone knows what the problem is with my code. Thanks!!
You want to wrap your plotting function with reactivePlot(...)
, rather than just reactive(...)
.
In general, reactive(...)
should be used for helper functions in your server that deliver input
-dependent data to output
functions. Functions that actually generate output
objects, however, should be wrapped with the specialized reactive functions, such as reactiveText
, reactivePrint
, reactiveTable
, and reactivePlot
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With