R 是否可以将输入传递到Shiny中的UI函数?

R 是否可以将输入传递到Shiny中的UI函数?,r,shiny,R,Shiny,我想在我闪亮的应用程序中创建一个动态UI,用户可以在其中指定各种面板的列宽。是否可以在服务器中呈现列宽并将其作为输出传递给UI,或者是否需要在UI中硬编码列宽?这里有一个文件脚本,允许用户选择两个面板的大小。有两个挑战我一开始没有看到,而且可能可以用更干净的方式处理。它们是: 用户定义的宽度输入框位于面板内,其宽度由该输入定义。基本上是鸡对蛋的情况。第一次运行时,您需要有一些方法将面板的宽度设置为某个初始值。我是在ifelse(…)函数中完成的 如果一个面板的宽度更改为大于6,则另一个面板需要收

我想在我闪亮的应用程序中创建一个动态UI,用户可以在其中指定各种面板的列宽。是否可以在服务器中呈现列宽并将其作为输出传递给UI,或者是否需要在UI中硬编码列宽?

这里有一个文件脚本,允许用户选择两个面板的大小。有两个挑战我一开始没有看到,而且可能可以用更干净的方式处理。它们是:

  • 用户定义的宽度输入框位于面板内,其宽度由该输入定义。基本上是鸡对蛋的情况。第一次运行时,您需要有一些方法将面板的宽度设置为某个初始值。我是在
    ifelse(…)
    函数中完成的
  • 如果一个面板的宽度更改为大于6,则另一个面板需要收缩,以便总和不大于12

    old_panel_width1 <<- 6
    old_panel_width2 <<- 6
    
    
    ui <- bootstrapPage(
      uiOutput("dynamic_panels")
    
     )
    
    server <- function(input, output) {
    
     n1 <- reactive(input$n1)
     n2 <- reactive(input$n2)
    
     output$dynamic_panels <- renderUI({
    
    #assigns an initial value of 6 when first loaded
    panel_width1 <<- ifelse(is.null(input$n1), 6, n1())
    panel_width2 <<- ifelse(is.null(input$n2), 6, n2())
    
    #one way of detecting whether panel 1 or 2 was changed and then adjusting the sizes so that the sum < 12
    if (panel_width1!= old_panel_width1){
      if (panel_width1 > 6 && sum(panel_width1,panel_width2) > 12) panel_width2 <<- 12 - panel_width1
      old_panel_width1 <<- panel_width1
    }
    
    if (panel_width2!= old_panel_width2){
      if (panel_width2 > 6 && sum(panel_width1,panel_width2) > 12) panel_width1 <<- 12 - panel_width2
      old_panel_width2 <<- panel_width2
    }
    
    
    
    fluidRow(
    column(width = panel_width1,
           numericInput('n1', 'size of panel 1', min = 1, max = 11,value = panel_width1),
           plotOutput("plot1")
           ),
    column(width = panel_width2,
           numericInput('n2', 'size of panel 2',min = 1, max = 11,value = panel_width2),
           plotOutput("plot2")
           )
     )
    
    })
    
    output$plot1 <- renderPlot(hist(runif(100)))
    output$plot2 <- renderPlot(hist(runif(100)))
    
    }
    
    # Return a Shiny app object
    shinyApp(ui = ui,server = server)
    

    old\u panel\u width1签出
    uiOutput()
    。这个功能很容易完成。我试过了,但没能让它工作。在服务器中,我输出了$width,这是常见的情况,因此,很难笼统地讨论代码。请将相关代码发布到您的问题中。有关如何创建可复制的示例的提示,请参阅。