如何解决使用for循环动态调用闪亮模块
我创建了一个闪亮的模块,该模块显示的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,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) { }
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。