You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:36:20