在R Shiny的列中动态排列输入框(selectInput / numericInput等)

时间:2019-11-25 09:00:38

标签: r shiny

我正在从ML模型(.rda文件)中提取重要变量,并将它们放在UI页面中的numericInput框或selectInput选项菜单中。我将每个输入放在不同的行中。我希望它作为连续两列。我怎样才能做到这一点?我正在按照image

中的说明进行操作

下面是我要修改的代码。

 model <- reactive({readRDS(input$Load_model$datapath)})
  temp_col <- reactive({colnames(model()$model)})
  temp_no_col <- reactive({ncol(model()$model)})

  abc <- reactive(lapply(model()$model, class))
  process <- eventReactive(input$show_fields, {
    lapply(1:(temp_no_col()), function(i) {
        if(abc()[i] == "numeric" ) {
          numericInput(temp_col()[i], label = temp_col()[i],value = 0)
        }
        else if(abc()[i] == "factor") {
          selectInput(temp_col()[i], label = temp_col()[i],choices = unique(model()$model[i]))
        }
    })
  })

1 个答案:

答案 0 :(得分:0)

正如@ismirsehregal在评论中所说,您需要看一下闪亮的布局指南。您正在使用lapply以编程方式创建输入,因此需要将创建的输入分派到两列中,如下所示:

process <- eventReactive(input$show_fields, {
  inputs_temp <- lapply(1:(temp_no_col()), function(i) {
    if(abc()[i] == "numeric" ) {
      numericInput(temp_col()[i], label = temp_col()[i],value = 0)
    }
    else if(abc()[i] == "factor") {
      selectInput(temp_col()[i], label = temp_col()[i],choices = unique(model()$model[i]))
    }
  })

  shiny::tagList(
    shiny::fluidRow(
      # odd cols column
      shiny::column(6, inputs_temp[1:length(inputs_temp) %% 2 != 0]),
      # even cols column
      shiny::column(6, inputs_temp[1:length(inputs_temp) %% 2 == 0])
    )
  )
}

但是请注意,您没有提供reproducible example,所以我无法测试答案的准确性。如果您使用应用程序的小示例来编辑问题,那么我可以调整和编辑答案以使用该问题。