R 是否可以将输入传递到Shiny中的UI函数?
我想在我闪亮的应用程序中创建一个动态UI,用户可以在其中指定各种面板的列宽。是否可以在服务器中呈现列宽并将其作为输出传递给UI,或者是否需要在UI中硬编码列宽?这里有一个文件脚本,允许用户选择两个面板的大小。有两个挑战我一开始没有看到,而且可能可以用更干净的方式处理。它们是:R 是否可以将输入传递到Shiny中的UI函数?,r,shiny,R,Shiny,我想在我闪亮的应用程序中创建一个动态UI,用户可以在其中指定各种面板的列宽。是否可以在服务器中呈现列宽并将其作为输出传递给UI,或者是否需要在UI中硬编码列宽?这里有一个文件脚本,允许用户选择两个面板的大小。有两个挑战我一开始没有看到,而且可能可以用更干净的方式处理。它们是: 用户定义的宽度输入框位于面板内,其宽度由该输入定义。基本上是鸡对蛋的情况。第一次运行时,您需要有一些方法将面板的宽度设置为某个初始值。我是在ifelse(…)函数中完成的 如果一个面板的宽度更改为大于6,则另一个面板需要收
ifelse(…)
函数中完成的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,这是常见的情况,因此,很难笼统地讨论代码。请将相关代码发布到您的问题中。有关如何创建可复制的示例的提示,请参阅。