R alpanel更新问题

R alpanel更新问题,r,shiny,R,Shiny,我有一个闪亮的应用程序,不会出现任何错误,但我的conditionalPanel显然工作不正常。当我选择输入时,一些图形会更新,而一些则不会。例如,如果我选择week并更改0或1的条件,则图形会更新,但如果我选择rel,则图形会更新1,但不会更新4(如果我在Shiny应用程序之外执行此操作,则适用于所有情况)。这是代码的样子: 用户界面 服务器.R shinyServer(function(input, output, session) { simiData <- reactive({

我有一个闪亮的应用程序,不会出现任何错误,但我的conditionalPanel显然工作不正常。当我选择输入时,一些图形会更新,而一些则不会。例如,如果我选择week并更改0或1的条件,则图形会更新,但如果我选择rel,则图形会更新1,但不会更新4(如果我在Shiny应用程序之外执行此操作,则适用于所有情况)。这是代码的样子: 用户界面

服务器.R

shinyServer(function(input, output, session) {

simiData <- reactive({ 
 eval(substitute(taxi %>%  group_by(simi.mean,col) %>% summarise(mean = mean(prop.conv)) %>% 
                                  filter(col==input$levels) %>% select(simi.mean,mean), 
                                list(col=as.symbol(input$zcol))))
  })

 distData <- reactive({ 
eval(substitute(taxi %>%  group_by(dist.mean,col) %>% summarise(mean = mean(prop.conv)) %>% 
                  filter(col==input$levels) %>% select(dist.mean,mean), 
                list(col=as.symbol(input$zcol))))
})

output$plot1 <- renderPlot({
 plot(simiData(),xlim=c(0,max(simiData()$simi.mean)),ylim=c(0,max(simiData()$mean)))
})

output$plot2 <- renderPlot({
plot(distData())
})

 })
shinyServer(功能(输入、输出、会话){
相似数据%分组依据(相似平均值,列)%>%汇总(平均值=平均值(专有值))%>%
过滤器(列==输入$levels)%>%选择(相似平均值,平均值),
列表(col=as.symbol(输入$zcol)))
})
distData%分组依据(dist.mean,col)%>%汇总(mean=平均值(prop.conv))%>%
过滤器(列==输入$levels)%>%选择(dist.mean,mean),
列表(col=as.symbol(输入$zcol)))
})

output$plot1不能有多个selectInputs具有相同的inputId(“级别”)。每一个都需要一个唯一的输入

您不需要有多个SelectInput,只需拥有一个,然后使用
updateSelectInput(会话,“级别”,choices=newValue))
更新选项即可。
每次更改
input$zcol
时,您可以使用观察者更改
input$levels
的选项

下面是如何使用观察者更新selectinput的基本示例

taxi <- data.frame(week=sample(1:10),hour=sample(1:10))
runApp(list(
  ui = shinyUI(
        fluidPage(
            sidebarLayout(
                sidebarPanel(
                    selectInput("zcol", 'Variable to be fixed',  names(taxi)),
                    selectInput("levels", "Levels",1:5)
                ),
                mainPanel(
                    plotOutput('plot1')
                )
            )
        )
  ),

    server = function(input, output, session) {

        output$plot1 <- renderPlot({
            plot(taxi[1:input$levels,])
        })

        observe({
            if ( input$zcol == 'week') {
                updateSelectInput(session, "levels", choices = 1:5)
            } else if(input$zcol == 'hour') {
                updateSelectInput(session, "levels", choices = 6:10)
            }
        })

    }
))

taxi我选择相同inputId名称的原因之一是在构建数据帧时允许我使用常规引用:
filter(col==input$levels)
。由于我不允许这样做,您知道有其他功能可以这样做,而不是为每个inputId构建一个表吗?
taxi <- data.frame(week=sample(1:10),hour=sample(1:10))
runApp(list(
  ui = shinyUI(
        fluidPage(
            sidebarLayout(
                sidebarPanel(
                    selectInput("zcol", 'Variable to be fixed',  names(taxi)),
                    selectInput("levels", "Levels",1:5)
                ),
                mainPanel(
                    plotOutput('plot1')
                )
            )
        )
  ),

    server = function(input, output, session) {

        output$plot1 <- renderPlot({
            plot(taxi[1:input$levels,])
        })

        observe({
            if ( input$zcol == 'week') {
                updateSelectInput(session, "levels", choices = 1:5)
            } else if(input$zcol == 'hour') {
                updateSelectInput(session, "levels", choices = 6:10)
            }
        })

    }
))