繁体   English   中英

根据条件在R Shiny中显示/隐藏selectinput

[英]Show / Hide selectinput in R shiny based on conditions

我正在尝试使用条件来显示或隐藏R Shiny应用程序中的selectinput,无论该标签在UI中是否可用。 因此,在带有标题product use选项卡上,应该看到产品类别下的所有下拉列表,否则只有产品类别下的第一个下拉列表可见。

以下是我正在执行的但没有使条件正常工作的方法:

 # This is the server logic for a Shiny web application. # You can find out more about building applications with Shiny here: # # http://shiny.rstudio.com # library(shiny) library(shinydashboard) library(shinyBS) library(knitr) library(kableExtra) library(shiny) library(shinythemes) ui <- dashboardPage( dashboardHeader(disable = F, title = "PATH Study"), dashboardSidebar( selectInput( "wave", h4("Wave"), choices = list( "Wave 1" = 1 ), selected = 1 ), sidebarMenu( menuItem( "Population Filter", selectInput( "ethnicity", h4("Ethnicity"), choices = list( "Hispanic" = 1, "Asian" = 2, "White" = 3, "African American" = 4 ), selected = 1 ), selectInput( "age", h4("Age Group"), choices = list( "Total" = 1, "Youth(12-17)" = 2, "Young Adult (18-24)" = 3, "Adult (25+)" = 4 ), selected = 1 ), selectInput( "category", h4("Gender"), choices = list( "Total" = 1, "Male" = 2, "Female" = 3 ), selected = 1 ) ) ), conditionalPanel( condition = "dashboardBody(tabPanel(title == 'product_use'))", sidebarMenu(menuItem( "Product Category", selectInput( "category", h4("Category"), choices = list( "Total Cigars" = 1, "Cigarillo" = 2, "Cigarette" = 3, "E-Vapor" = 4 ), selected = 1 ), selectInput( "flavor", h4("Flavor"), choices = list( "Total" = 1, "Flavored" = 2, "Non-Flavored" = 3 ), selected = 1 ), selectInput( "use_level", h4("User Level"), choices = list( "Total" = 1, "Experimental" = 2, "Established" = 3, "No Tobacco Use" = 4 ), selected = 1 ) )) ) ), #S dashboardPage(header = dashboardHeader(), sidebar = dashboardSidebar(),body,title = NUll, skin = "yellow"), dashboardBody(box( width = 12, tabBox( width = 12, id = "tabBox_next_previous", tabPanel("Initiation", fluidRow( box( title = "Wave 1 Ever Tried and % 1st Product Flavored", width = 5, solidHeader = TRUE, status = "primary", tableOutput("smoke"), collapsible = F, bsTooltip( "bins", "The wait times will be broken into this many equally spaced bins", "right", options = list(container = "body") ) ) )), tabPanel("Cessation", p("This is tab 3")), tabPanel("product_use", p("This is tab 4")), tags$script( " $('body').mouseover(function() { list_tabs=[]; $('#tabBox_next_previous li a').each(function(){ list_tabs.push($(this).html()) }); Shiny.onInputChange('List_of_tab', list_tabs);}) " ) ), uiOutput("Next_Previous") )) ) server <- function(input, output, session) { output$Next_Previous = renderUI({ tab_list = input$List_of_tab[-length(input$List_of_tab)] nb_tab = length(tab_list) if (which(tab_list == input$tabBox_next_previous) == nb_tab) column(1, offset = 1, Previous_Button) else if (which(tab_list == input$tabBox_next_previous) == 1) column(1, offset = 10, Next_Button) else div(column(1, offset = 1, Previous_Button), column(1, offset = 8, Next_Button)) }) output$smoke <- # renderTable({ # pct_ever_user(data_selector(wave = 1, youth = FALSE), type = "SM") # }) function() { pct_ever_user(data_selector(wave = 1, youth = FALSE), type = "SM")[, c("variable", "mean", "sum_wts", "se")] %>% # rename(pct_ever_user(data_selector(wave = 1, youth = FALSE), type = "SM"), c("mean"="N", "sum_wts"="Weighted N"))%>% knitr::kable("html") %>% kable_styling("striped", full_width = F) } output$table2 <- function() { # req(input$mpg) table2 %>% knitr::kable("html") %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) } output$consumption <- function() { # req(input$mpg) consumption %>% knitr::kable("html") %>% kable_styling("striped", full_width = F) } output$consumption_flav <- function() { # req(input$mpg) consumption_flav %>% knitr::kable("html") %>% kable_styling("striped", full_width = F) } } shinyApp(ui = ui, server = server) 

如果只希望在product_use标签上显示“产品类别”菜单,则可以将条件设​​置为以下内容:

condition = "input.tabBox_next_previous  == 'product_use'",

?conditionalPanel

条件
一个JavaScript表达式,将被反复评估以确定是否应显示面板。

在JS表达式中,您可以引用包含输入和输出的当前值的输入和输出JavaScript对象。 例如,如果输入的ID为foo,则可以使用input.foo读取其值。 (请确保不要修改输入/输出对象,因为这可能导致不可预测的行为。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM