小编Mar*_*uss的帖子

如何在 R/Shiny flow 中动态创建输入,就像 flowLayout 中的普通输入一样?

我混合了动态创建的输入和通常定义的输入。动态创建的输入的行为就像一个大型垂直堆叠块,其他输入围绕其流动。我怎样才能让它们全部流动在一起?

这重现了这个问题:

library(shinydashboard)
shinyApp(
  ui = dashboardPage(
    dashboardHeader(),
    dashboardSidebar(),
    dashboardBody(
      flowLayout(
        uiOutput('input_fields'),
        textInput('fielda','Field A',''),
        textInput('fieldb','Field B',''),
        textInput('fieldc','Field C',''),
        textInput('fieldd','Field D','')
      )
    )
  ),
  server = function(input, output) {
    output$input_fields <- renderUI({
      lapply(1:4, function(i) {
        textInput(paste0('field',i), paste('Field',i),'')
      })
    })
  }
)
Run Code Online (Sandbox Code Playgroud)

当前布局:

所需布局:

编辑:忽略字段 A、B、C、D 小部件。它们仅用于显示其他项目如何换行,但 uiOutput 项目充当一个块。假设所有输入都是动态的。

我想我应该使用这段代码。它将 renderUI 移动到 lapply 内以创建多个通用输出(在运行时变化,最多 10 个),我可以使用同样通用的 uiOutput 语句来引用这些输出。它甚至不会警告 5 个不存在的输出。不完美,但可以了。可能需要添加一个observeEvent,因为我认为它本身不会做出反应。

library(shinydashboard)
shinyApp(
  ui = dashboardPage(
    dashboardHeader(),
    dashboardSidebar(),
    dashboardBody(
      wellPanel(
        flowLayout(
          uiOutput('field1'),
          uiOutput('field2'),
          uiOutput('field3'),
          uiOutput('field4'),
          uiOutput('field5'),
          uiOutput('field6'),
          uiOutput('field7'),
          uiOutput('field8'),
          uiOutput('field9'),
          uiOutput('field10')
        )
      ) …
Run Code Online (Sandbox Code Playgroud)

r input dynamic shiny

4
推荐指数
1
解决办法
1857
查看次数

标签 统计

dynamic ×1

input ×1

r ×1

shiny ×1