我最近开始玩Shiny。我试图写一些东西来证明中心极限定理。我的代码如下:
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))})
})
当我尝试使用runApp()
运行代码时,下面是我得到的。如您所见,未显示绘图。
奇怪的是,当我回到我的Rstudio,并按下“Esc”退出应用程序时,我的Rstudio中显示的情节如下所示:
我想知道是否有人知道我的代码存在什么问题。谢谢!
答案 0 :(得分:9)
您希望使用reactivePlot(...)
包装绘图功能,而不仅仅是reactive(...)
。
通常,reactive(...)
应该用于服务器中的辅助函数,它将input
依赖数据传递给output
函数。但是,实际生成output
个对象的函数应该包含专门的反应函数,例如reactiveText
,reactivePrint
,reactiveTable
和reactivePlot
。< / p>