Я создаю приложение, в котором у меня есть переменное количество полей ввода . Эти поля являются чередующимися полями 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)
Спасибо за ваши мысли!