与withMathJax和评估顺序相关的闪亮问题

时间:2015-12-04 11:32:47

标签: r shiny mathjax

昨天,我第一次尝试创建一个闪亮的应用程序。我已经走到这一步了,但有些事我还不太了解,所以这里是应用程序:

library(shiny)
library(ggplot2)

### Ui

ui <- shinyUI(fluidPage(
   titlePanel("Distributions"),
   sidebarLayout(
     sidebarPanel(
       selectInput("dist", "Distribution",
                    c("Normal distribution"       = "norm",
                      "t-distribution"            = "t",
                      "Poisson distribution"      = "pois"
                  )
                  ),

       uiOutput("ui")
       ),
     mainPanel(
       plotOutput("plot")
       )
      )
     )
     )


### Server

server <- shinyServer(function(input, output) {
       output$ui <- renderUI({
         switch(input$dist,
                "norm" = withMathJax(wellPanel(numericInput("norm_mu", "Mean: \\(\\mu\\)", value = 0),
                                               numericInput("norm_sd", "Standard deviation: \\(\\sigma\\)", value = 1, min = 0))),
                "t"    = numericInput("t_df", "Degrees of freedom:", value = 1, min = 1),
                "pois" = withMathJax(numericInput("pois_lambda", "Parameter: \\(\\lambda\\)",
                                                  value = 1))
                )
         })

       output$plot <- renderPlot({
          dist_range <-  switch(input$dist,
                                "norm" = c(-10, 10),
                                "t"    = c(-10, 10),
                                "pois" = seq(0, 20, by = 1))
          a <- ggplot(data.frame(x = dist_range), aes(x = x))
          a <- a + switch(input$dist,
                           "norm" = stat_function(fun = dnorm, args = list(mean = input$norm_mu, sd = input$norm_sd)),
                           "t"    = stat_function(fun = dt, args = list(df = input$t_df)),
                "pois"  = geom_bar(aes(y = dpois(x, lambda = input$pois_lambda)), stat = "identity")
                          )
          a
  })
})

shinyApp(ui = ui, server = server)

现在我的问题是:

  1. 当我第一次运行应用程序时,我在主面板中没有绘图但在我的控制台中有两个错误:

    Error in (function (x, mean = 0, sd = 1, log = FALSE)  : 
    Non-numeric argument for mathematical function
    
    Error in exists(name, envir = env, mode = mode) : 
    argument "env" is missing, with no default
    

    我发现,withMathJax导致了这些错误,但无论如何有两件事让我感到困惑。

    一个。当我删除withMathJax时,会出现情节,但我仍然会收到这些错误。那是为什么?
    湾如果我不删除withMathJax,运行应用程序,然后选择另一个分发,我得到一个情节,但错误仍然存​​在。如果我再次返回正态分布,则会出现该图(以及错误)。如果我再次选择t分布,一切都完美无误。这是为什么 ?

  2. 注意:我猜这与评估何时以及如何评估有关。如果是这样,有人可以澄清这一点,或者至少指出一些好的文档和2.)解释如何避免这种行为。

    1. 选择Poisson分布会导致错误:

      Error in dpois(x, lambda = input$pois_lambda) : object 'input' not found
      

      为什么不能在这里访问input$pois_lambda?与用于正常分布和t分布的stat_function(...)部分有什么不同,其中访问似乎不是问题?

    2. 非常感谢帮助!谢谢

0 个答案:

没有答案