我已经创建了一个闪亮的模块,它显示的textInputs与一行中另一个变量的长度一样多。
如果我一个接一个地手动调用这些模块,它会工作得很好:
library(shiny)
library(shinydashboard)
scenarios <- c("Scenario 1", "Scenario 2", "Scenario 3", "Scenario 4")
scenarioInput <- function(id, nomScenario){
ns <- NS(id)
textInput(inputId = ns("scenario"), label=nomScenario)
}
box1 <- shinydashboard::box(width=NULL, status="primary", align="center",
HTML("<h1><strong>Scénarios</strong></h1>"),
splitLayout(
cellWidths = rep(paste0(100/length(scenarios), "%"), length(scenarios)),
cellArgs = list(style = "padding: 2%"),
scenarioInput(id=1, nomScenario=scenarios[1]),
scenarioInput(id=2, nomScenario=scenarios[2]),
scenarioInput(id=3, nomScenario=scenarios[3]),
scenarioInput(id=4, nomScenario=scenarios[4])
)
)
body <- dashboardBody(
fluidRow(
column(width = 12,
box1,
)
)
)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
body
)
shinyApp(ui = ui, server = function(input, output) { })但是,如果我尝试通过for循环调用这些模块,屏幕上不会显示任何textInput框。
box1 <- shinydashboard::box(width=NULL, status="primary", align="center",
HTML("<h1><strong>Scénarios</strong></h1>"),
splitLayout(
cellWidths = rep(paste0(100/length(scenarios), "%"), length(scenarios)),
cellArgs = list(style = "padding: 2%"),
for (i in 1:length(scenarios)){scenarioInput(id=i, nomScenario=scenarios[i])}
)
)有没有人知道一种让它工作的方法?
发布于 2020-09-11 22:34:19
您需要将textInputs作为参数传递给splitLayout。这可以通过do.call完成
library(shiny)
library(shinydashboard)
scenarios <- c("Scenario 1", "Scenario 2", "Scenario 3", "Scenario 4")
scenarioInput <- function(id, nomScenario) {
ns <- NS(id)
textInput(inputId = ns("scenario"), label = nomScenario)
}
box1 <- shinydashboard::box(
width = NULL,
status = "primary",
align = "center",
HTML("<h1><strong>Scénarios</strong></h1>"),
do.call(
what = splitLayout,
args = c(
lapply(seq_along(scenarios), function(i) {
scenarioInput(id = i, nomScenario = scenarios[i])
}),
list(cellWidths = list("10%", "20%", "30%", "40%")), # list(cellWidths = rep(paste0(100 / length(scenarios), "%"), length(scenarios))),
list(cellArgs = list(style = "padding: 2%"))
)
)
)
body <- dashboardBody(fluidRow(column(width = 12, box1)))
ui <- dashboardPage(dashboardHeader(),
dashboardSidebar(),
body)
shinyApp(
ui = ui,
server = function(input, output) { }
)

https://stackoverflow.com/questions/63832656
复制相似问题