首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for循环动态调用一个闪亮模块的次数

使用for循环动态调用一个闪亮模块的次数
EN

Stack Overflow用户
提问于 2020-09-10 23:12:29
回答 1查看 58关注 0票数 1

我已经创建了一个闪亮的模块,它显示的textInputs与一行中另一个变量的长度一样多。

如果我一个接一个地手动调用这些模块,它会工作得很好:

代码语言:javascript
复制
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框。

代码语言:javascript
复制
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])}
            )
)

有没有人知道一种让它工作的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-11 22:34:19

您需要将textInputs作为参数传递给splitLayout。这可以通过do.call完成

代码语言:javascript
复制
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) {  }
)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63832656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档