矩阵形式的动态输入小部件,闪亮

时间:2018-01-20 07:50:10

标签: r shiny lapply

我开发了一个使用闪亮的应用程序,允许用户输入他选择的行数和列数,然后相应地在主面板中显示相应数量的输入小部件。目前有1列和多行,它正在运行。

我的挑战是如果用户选择多于1列,则复制相同的内容,并且这些新列应该以矩阵形式与主面板中的现有窗口小部件相邻。

怎么做?

我的代码:

library(shiny)

ui <- shinyUI(fluidPage(
  titlePanel(title = "Adding input widgets horizontally and dynamically"), 
  sidebarLayout(

    sidebarPanel(numericInput("rows","Input No. of rows",value = 5),
                 br(),
                 numericInput("col","input No of col",value = 1)),

    mainPanel(uiOutput("plo"))
  )
)
)

server <- function(input,output){

  output$plo <- renderUI({

    lapply(seq(input$rows),function(i){
      numericInput(inputId = paste0("range",i),label = "col1",value = i)  
    })
  })
}

shinyApp(ui,server)

1 个答案:

答案 0 :(得分:2)

您可以以非常类似的方式执行此操作,使用另一个lapply将内部lapply包裹为column。请尝试以下方法:

library(shiny)

ui <- shinyUI(fluidPage(
  titlePanel(title = "Adding input widgets horizontally and dynamically"), 
  sidebarLayout(

    sidebarPanel(numericInput("rows","Input No. of rows",value = 5,min=1),
                 br(),
                 numericInput("col","input No of col",value = 1,min=1)),

    mainPanel(uiOutput("plo"))
  )
)
)

server <- function(input,output){

  output$plo <- renderUI({

    lapply(seq(input$col), function(j){
      column(width=3,
      lapply(seq(input$rows),function(i){
        numericInput(inputId = paste0("range",i,"_",j),label = "col1",value = i)  
      })
      )
    })
  })
}

shinyApp(ui,server)

希望这有帮助!