假设我在4个不同的目录(.“/X1/Y1/"、.”/X1/Y2/"、.“/X2/Y1/"、.”/X2/Y2/”)中有4组UI/服务器模块,我想根据侧边栏中的输入加载所选的组。
我尝试在dashboardBody()
中使用source()
,但没有成功。
library(shiny)
library(shinydashboard)
# path to modules
in_path <- "C:/a/b/c/"
# ui
ui <- dashboardPage(
dashboardHeader(title = "test"),
dashboardSidebar(
br(),
selectInput('f1', 'Folder 1', choices = c("X1", "X2")),
helpText(""),
selectInput('f2', 'Folder 2', choices = c("Y1", "Y2")),
br(),
actionButton("load", "Load", icon("thumbs-up"), width = "85%")
),
dashboardBody(
# UI module here from, e.g., "C:/a/b/c/X1/Y2/my_UI.R"
)
)
# server
server <- function(input, output, session) {
# server module here from, e.g., "C:/a/b/c/X1/Y2/my_Server.R"
}
shinyApp(ui, server)
1条答案
按热度按时间wi3ka0sx1#
由于
shiny
模块是简单的函数,因此我将在开始时提供它们的源代码,并使用uiOutput
显示不同的模块。下面是一个总体思想的工作示例(示例模块代码引以为傲地从官方Shiny documentation中窃取):
<mod1.R>
<mod2.R>
一米四分一秒
一些解释
1.您将模块代码放在
mod[12].R
中,它是相当直接的。1.在你的主应用中,你加载了两个(!)源文件,出于管理的原因,我把两个模块函数(
ui
和server
)放在一个list
中,但这并不是严格必要的,但有利于未来的扩展。1.在您的
UI
中,您有一个uiOutput
,它根据选定的模块动态呈现。1.在您的
server
中,您放置了动态呈现UI
并调用相应服务器函数的代码。uid
结构基本上是用来强制一个新的渲染,无论你何时改变选择。否则,当你回到一个你已经渲染过的模块时,你可能仍然会看到一些旧的值。