昨天,我第一次尝试创建一个闪亮的应用程序。我已经走到这一步了,但有些事我还不太了解,所以这里是应用程序:
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)
现在我的问题是:
当我第一次运行应用程序时,我在主面板中没有绘图但在我的控制台中有两个错误:
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.)解释如何避免这种行为。
选择Poisson分布会导致错误:
Error in dpois(x, lambda = input$pois_lambda) : object 'input' not found
为什么不能在这里访问input$pois_lambda
?与用于正常分布和t分布的stat_function(...)
部分有什么不同,其中访问似乎不是问题?
非常感谢帮助!谢谢