モジュールに大きく依存している光っているアプリがあります。基本的には、すべてのタブがモジュールとしてラップされている異なるメニューとタブを持つ大きなnavbarPageです。下に私は2つのタブで、最小限の例を提供していますが、サーバ機能は、このハードコーディングされたサーバ機能を非常に大きくなる参照かもしれませんが、現実には20以上R ShinyApps:ダイナミックモジュールのインポートにより、アプリケーションが間違ったタブをレンダリングする
# module 1 ------------------------------------------------
moduleOneUI <- function(id) {
ns = NS(id)
tagList(
h2("module1"),
textOutput(ns("text"))
)
}
moduleOne <- function(input, output, session) {
output$text <- renderText({"one yo"})
}
# module 2 ------------------------------------------------
moduleTwoUI <- function(id) {
ns = NS(id)
tagList(
h2("module2"),
textOutput(ns("text"))
)
}
moduleTwo <- function(input, output, session) {
output$text <- renderText({"two yo"})
}
# main app ------------------------------------------------
ui <- navbarPage(
"dashboard",
navbarMenu(
"#1",
tabPanel(
"mod1",
uiOutput("module_one")
)
),
navbarMenu(
"#2",
tabPanel(
"mod2",
uiOutput("module_two")
)
)
)
server <- function(input, output, session) {
output$module_one <- renderUI({
moduleOneUI("module_one")
})
callModule(moduleOne, "module_one")
output$module_two <- renderUI({
moduleTwoUI("module_two")
})
callModule(moduleTwo, "module_two")
}
shinyApp(ui, server)
があります。だから私はループを使用してより動的な方法でそれを作成しようとしました:しかし、このアプローチは期待どおりに動作しません。今度はmodule_woコードがmodule_oneタブにレンダリングされています:
なぜこれが起こっているのか、どのように修正できますか?すべてのモジュールをレンダリングするには、本当にダイナミックなアプローチが必要です。
これは動作します。全ての 'apply'関数はR 3.2でこれを行うように変更されました。 –
その情報をありがとう!しかし、それはまたこのようにするときにlapplyなしで動作するようです: '(mod_idの名前(モジュール)){ create_tab(mod_id、出力) }' – SaturnFromTitan
'mod_id'は' renderUI'式の外で使われます。したがって、 'renderUI'式が評価されるときには、' mod_id'は対応する 'create_tab'関数環境のために既に評価されています。 –