我不知道我是否在这里缺少有关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的基本概念吗?有什么简单的方法可以解决这个问题?