Shiny App反应对象和广泛范围之间的编码差异

时间:2015-07-25 00:12:13

标签: r shiny

示例可能看起来很长但很简单。

我的问题在于有一个被动对象和<<-的使用。 我有另一个闪亮的应用程序使用:

blah <- reactive({
dat <<- etcetc
)

然后在dataTable和绘图组件中成功使用dat。但是下面我没有努力。

问题:item1 <- reactive({etc})item2 <<- etc之间的区别

据我了解,您可以将反应数据集放入对象(item1),然后将item1()放入代码中,然后再使用它。范围规则建议您可以使用item2 <<- etc,然后在代码中稍后使用item2

contents2 <- reactive({
datp <- data.frame(mean = c(r1, r2),
chosen = c(rep("A", length(r1)), rep("B", length(r2))))
datp
})

我知道我可以将下面的代码分解为上面的表单(datpdatci是他们自己的被动对象(比如contents2contents3),并且它有效)但是下面的范围<<-不应该工作吗?

示例:

library(ggplot2)

ui <- navbarPage("Test",
                         tabPanel("Panel A",
                                  sidebarLayout(
                                    sidebarPanel(
                                      sliderInput("n1", "N sample 1:", 
                                                  min=2, max=30, value=3),
                                      sliderInput("n2", "N sample 2:", 
                                                  min=2, max=30, value=3),
                                      numericInput("mean1", label = h5("Mean 1"), value = 100),
                                      numericInput("mean2", label = h5("Mean 2"), value = 80),
                                      numericInput("sd1", label = h5("Std Dev 1"), value = 10),
                                      numericInput("sd2", label = h5("Std Dev 2"), value = 10),

                                      radioButtons("cilevel", "Confidence Interval",
                                                   c("99%" = 0.99, 
                                                     "95%" = 0.95,
                                                     "90%" = 0.90),
                                                   selected = 0.95)
                                    )
                                    ,
                                    mainPanel(
                                      plotOutput("plot")
                                    )
                                  )

                         ),
                         tabPanel("Panel B",
                                  sidebarLayout(
                                    sidebarPanel(
                                    )
                                    ,
                                    mainPanel(
                                    )
                                  )
                         )
)

server <- function(input, output, session) {

  contents1 <- reactive({
    r1 <- rnorm(input$n1, input$mean1, input$sd1)
    r2 <- rnorm(input$n2, input$mean2, input$sd2)
    # Note the change to << now
    cimult <<- qt(as.numeric(input$cilevel)/2 + .5, length(r1))
    datp <<- data.frame(mean = c(r1, r2),
                        chosen = c(rep("A", length(r1)), rep("B", length(r2))))
    datci <<- data.frame(mean = c(mean(r1), mean(r2)),
                         sd = c(sd(r1), sd(r2)),
                         n = c(length(r1), length(r2)),
                         se = c(sd(r1)/sqrt(length(r1)), sd(r2)/sqrt(length(r2))),
                         chosen = c("A", "B"))
  })

  output$plot <- renderPlot({
    ggplot(datci, aes(x = factor(chosen),
                      y = mean)) +
      geom_errorbar(aes(ymin = mean - cimult * se,
                        ymax = mean + cimult * se,
                        color = factor(chosen))) + 
      geom_point(aes(color = factor(chosen)), alpha = 0.8) +
      geom_point(data = contents1(), alpha = 0.8) + 
      coord_flip()

  })
}

shinyApp(ui = ui, server = server)

0 个答案:

没有答案