如何在Shiny应用中实现动态列宽?遇“column width must be between 1 and 12”报错
解决Shiny动态列宽报错“column width must be between 1 and 12”
问题原因
你当前的写法是把uiOutput("n1")直接传给column的宽度参数,但uiOutput返回的是UI组件而非数字,且应用初始化时input$cat尚未赋值,会导致宽度参数无效,触发报错。
修正方案
不要单独渲染列宽数值,而是在server端动态渲染整个column组件,将宽度和列内内容一并返回。
修正后的完整代码
## app.R ## library(shiny) library(shinydashboard) library(shinyWidgets) library(DT) ui <- dashboardPage( dashboardHeader(title = "VMT-Mobility"), dashboardSidebar(), dashboardBody( fluidRow( column(3, pickerInput( inputId = "cat", label = "Select categories", choices = c("1st","2nd"), selected = "1st", multiple = FALSE ) ) ), fluidRow( uiOutput("column1"), uiOutput("column2") ) ) ) server <- function(input, output) { output$column1 <- renderUI({ col_width <- if(input$cat == "1st") 9 else 3 column(width = col_width, box("内容1")) }) output$column2 <- renderUI({ col_width <- if(input$cat == "1st") 3 else 9 column(width = col_width, box("内容2")) }) } shinyApp(ui, server)
关键修改点
- UI层:将原有的
column(uiOutput("n1"),box())替换为uiOutput("column1"),让server端返回完整的列组件 - Server层:
renderUI直接返回column(width = 计算值, box(...)),确保宽度参数始终是1-12之间的有效数字,同时包含列内的内容
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

