如果语句弄乱了eventReactive

时间:2019-11-20 13:46:41

标签: r shiny rstudio shiny-reactivity

我不知道我是否在这里缺少有关Shiny的一些基本事实(这可能是我不熟悉R的原因),但是我有一大堆无法正常工作的代码,我也不知道为什么。 / p>

我有一个数据库,并且有一个基本的Shiny应用程序,可以根据该应用程序绘制图表。用户可以选择数据库中的任何变量,也可以选择我拥有的变量之一的可能值中的一个值。 为此,我使用两个selectInputs。我也有更新按钮,该按钮链接到服务器功能中的一些eventReactives。这是在侧边栏内。 除此之外,我还有一个mainPanel,其中显示了创建的图形(或以前使用过的图形)。

这是我的应用程序

library("shiny")
library("tidyverse")


ui <- fluidPage(
  titlePanel(" Gráficas según tipo de delito"),
  sidebarLayout(
    sidebarPanel(
      helpText("Seleccionando una variable de la lista muestra gráficas para cada delito."),

      selectInput(
        inputId ="variable_graf",
        label="Seleccione la variable", 
        choices = database %>% names(),
        selected = "PUDAHUEL"
      ),

      selectInput(
        inputId = "delito_graf" ,
        label="Seleccione delito", 
        choices = database$nombre_delito %>% unique(),
        selected="hurto"
      ),
      actionButton(
        inputId = "boton_graf",
        label=" Pulse para actualizar la gráfica con los datos seleccionados"
      )

      ),
    mainPanel( 
      plotOutput("graph"),
      dataTableOutput("base_mostrar")
    )
  )
  )

server <- function(input, output) {

  shiny_database<-eventReactive(
    input$boton_graf,
    {
      df <- database %>% filter( nombre_delito==input$delito_graf)
      df <- df %>% group_by( !!as.name(input$variable_graf ) ) %>% count()

         }

  )

  graf_por_delito<-eventReactive(
    shiny_database(),
    {
      ggplot(data = shiny_database() , mapping = aes(x = !!as.name(input$variable_graf), y = n)) +
       geom_col()+ggtitle(input$delito_graf %>% paste("por") %>% paste(input$variable_graf))+ theme(plot.title = element_text(hjust = 0.5))
    }
  )

  output$graph<-renderPlot({
    graf_por_delito()
  })

  output$base_mostrar<-renderDataTable({shiny_database()})

}


    shinyApp(ui = ui, server = server)

在我尝试在一个selectInputs中添加一个新选项之前,一切都工作顺利且正常。 此选项需要创建一个新的数据集和一个新的ggplot。 为此,我在eventReactive()函数中创建了两个if语句。

它没有用。在尝试对其进行调试之后,我注意到问题不在我的新if语句中的代码中,而是在第二个if语句中。

如果我将代码保存在if语句中的eventReactive()函数之一中,则可以正常工作。 但是当我添加第二条if语句的那一刻,即使它无效且执行条件没有发生,我的图也不会显示。

我在这里缺少任何Shiny的基本概念吗?有什么简单的方法可以解决这个问题?

0 个答案:

没有答案