行上の別の変数の長さと同じ数の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])}
)
)
誰かがこれを機能させる方法を知っていますか?
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) { }
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加