Как отформатировать tagList, чтобы сделать раскладку по столбцам в RShiny? - PullRequest
0 голосов
/ 27 августа 2018

Я создаю приложение, в котором у меня есть переменное количество полей ввода . Эти поля являются чередующимися полями selectizeInput() и textInput(), где идентификатор увеличивается на 1 с каждым набором обоих входов. Я достиг генерации с некоторым вдохновением от R Shiny: Как динамически добавлять произвольное количество входных виджетов

Теперь я хотел бы изменить расположение входных виджетов в моем списке тегов. С текущим кодом все теги в inputTagList, добавленные с помощью tagAppendChild(), печатаются ниже предыдущего в моем приложении.

Я бы хотел, чтобы они были напечатаны в двух столбцах , где первый тег находится вверху слева, второй вверху справа, третий слева во втором ряду, затем второй ряд справа, и т.п. Это означает, что все поля selectizeInput() с именем namesInput, слева справа являются полями textInput() с именем groupInput.

Я взял необходимые элементы из своего приложения, чтобы сделать работоспособный пример:

library(shiny)

 ui <- fluidPage(
    mainPanel(sliderInput('numGroups','Number of      Groups',min=1,max=20,value=2,step=1),
              uiOutput("allInputs"))
)

 server <- function(input, output) {

    output$allInputs <- renderUI({
    inputTagList <- NULL
    inputTagList <- tagList()

    ## Define options for each input field
    opts <- as.list(paste0('Level',1:5))
    names(opts) <- sapply(opts,function(x) x)

    ## Get number of groups from sliderinput
    k <- input$numGroups

    for(i in 1:k) {
      # Define unique input id and label
      newInputId <- paste0("group", i)
      newInputLabel <- paste("Group levels", i)
      newInputId2 <- paste0("name", i)
      newInputLabel2 <- paste("Group name", i)
      newInputValue2 <- paste("Group",i)
      # Define new input

      namesInput <- selectizeInput(newInputId, newInputLabel,
                                   choices=opts,
                                   multiple=T)
          groupInput <- textInput(newInputId2, label = newInputLabel2, value = newInputValue2)

      # Append new input to list of existing inputs
      inputTagList <- tagAppendChild(inputTagList, namesInput)
      inputTagList <- tagAppendChild(inputTagList, groupInput)
    } # return list of inputs
    inputTagList
  })

}

# Run the application
 shinyApp(ui = ui, server = server)

Спасибо за ваши мысли!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...