其他模块内的闪亮模块
Shiny modules inside other modules
我正在尝试将一些图形模块放入另一个模块中。虽然目前不工作。我想这不是这样做的方法。关于应该如何完成的任何想法?
library(shiny)
library(tidyverse)
library(palmerpenguins)
# modules -----------------------------------------------------------------
# module that creates graphs
graph_ui <- function(id) {
ns <- NS(id)
plotOutput(ns("graph"))
}
# ui that brings in graphs from other module
outer_ui <- function(id) {
ns <- NS(id)
tagList(
"some text - would contain other objects too, not just graphs",
uiOutput(ns("graph1")), # output from renderUI from graph server
uiOutput(ns("graph2")) # output from renderUI from graph server
)
}
# creates graphs
graph_server <- function(id, xcat, ycat) {
moduleServer(id, function(input, output, session) {
output$graph <- renderPlot({
ggplot(penguins, aes(.data[[xcat]], .data[[ycat]], col = sex)) +
geom_point()
})
}
)
}
# brings in graphs
outer_server <- function(id, plot1, plot2) {
moduleServer(
id, function(input, output, session) {
output$graph1 <- renderUI(graph_server("inner1")) # from graph server
output$graph2 <- renderUI(graph_server("inner2")) # from graph server
}
)
}
# app ---------------------------------------------------------------------
ui <- fluidPage(
outer_ui("mod1")
)
server <- function(input, output, session) {
# graphs
graph_server("inner1", xcat = "bill_length_mm", ycat = "bill_depth_mm")
graph_server("inner2", xcat = "flipper_length_mm", ycat = "bill_depth_mm")
# brings graphs in to display
outer_server("mod1",
graph_server$inner1, # from graph server
graph_server$inner2) # from graph server
}
shinyApp(ui, server)
注意:也张贴在这里:https://community.rstudio.com/t/modules-within-modules-graph-in-other-modules/115160
您现在的问题在:
# brings graphs in to display
outer_server("mod1",
graph_server$inner1, # from graph server
graph_server$inner2) # from graph server
graph_server
是一个函数,所以你不能用 $
.
对它进行子集化
另一个问题是您在错误的模块级别调用 graph_server。
您目前正在做的事情(嵌套方面):
L app_ui
L outer_ui
L graph_ui
L app_server
L outer_server
L graph_server
如您所见,图形模块部分的深度不同。
你应该瞄准:
L app_ui
L outer_ui
L graph_ui
L app_server
L outer_server
L graph_server
这是工作结构:
library(shiny)
library(tidyverse)
library(palmerpenguins)
# Start with the lower level, just plotOutput & renderPlot
graph_ui <- function(id) {
ns <- NS(id)
plotOutput(ns("graph"))
}
graph_server <- function(id, xcat, ycat) {
moduleServer(id, function(input, output, session) {
output$graph <- renderPlot({
ggplot(
penguins,
aes(
.data[[xcat]],
.data[[ycat]],
col = sex
)
) +
geom_point()
})
}
)
}
# Here is a container for the graph module
outer_ui <- function(id) {
ns <- NS(id)
tagList(
"some text - would contain other objects too, not just graphs",
graph_ui(ns("graph1")), # First use of the graph module
graph_ui(ns("graph2")) # Second use of the graph module
)
}
# Server counterpart
outer_server <- function(id) {
moduleServer(id, function(input, output, session) {
# Making the graphs happen
graph_server("graph1", xcat = "bill_length_mm", ycat = "bill_depth_mm")
graph_server("graph2", xcat = "flipper_length_mm", ycat = "bill_depth_mm")
}
)
}
# app ---------------------------------------------------------------------
ui <- fluidPage(
outer_ui("mod1")
)
server <- function(input, output, session) {
outer_server("mod1")
}
shinyApp(ui, server)
干杯,
科林
我正在尝试将一些图形模块放入另一个模块中。虽然目前不工作。我想这不是这样做的方法。关于应该如何完成的任何想法?
library(shiny)
library(tidyverse)
library(palmerpenguins)
# modules -----------------------------------------------------------------
# module that creates graphs
graph_ui <- function(id) {
ns <- NS(id)
plotOutput(ns("graph"))
}
# ui that brings in graphs from other module
outer_ui <- function(id) {
ns <- NS(id)
tagList(
"some text - would contain other objects too, not just graphs",
uiOutput(ns("graph1")), # output from renderUI from graph server
uiOutput(ns("graph2")) # output from renderUI from graph server
)
}
# creates graphs
graph_server <- function(id, xcat, ycat) {
moduleServer(id, function(input, output, session) {
output$graph <- renderPlot({
ggplot(penguins, aes(.data[[xcat]], .data[[ycat]], col = sex)) +
geom_point()
})
}
)
}
# brings in graphs
outer_server <- function(id, plot1, plot2) {
moduleServer(
id, function(input, output, session) {
output$graph1 <- renderUI(graph_server("inner1")) # from graph server
output$graph2 <- renderUI(graph_server("inner2")) # from graph server
}
)
}
# app ---------------------------------------------------------------------
ui <- fluidPage(
outer_ui("mod1")
)
server <- function(input, output, session) {
# graphs
graph_server("inner1", xcat = "bill_length_mm", ycat = "bill_depth_mm")
graph_server("inner2", xcat = "flipper_length_mm", ycat = "bill_depth_mm")
# brings graphs in to display
outer_server("mod1",
graph_server$inner1, # from graph server
graph_server$inner2) # from graph server
}
shinyApp(ui, server)
注意:也张贴在这里:https://community.rstudio.com/t/modules-within-modules-graph-in-other-modules/115160
您现在的问题在:
# brings graphs in to display
outer_server("mod1",
graph_server$inner1, # from graph server
graph_server$inner2) # from graph server
graph_server
是一个函数,所以你不能用 $
.
另一个问题是您在错误的模块级别调用 graph_server。
您目前正在做的事情(嵌套方面):
L app_ui
L outer_ui
L graph_ui
L app_server
L outer_server
L graph_server
如您所见,图形模块部分的深度不同。
你应该瞄准:
L app_ui
L outer_ui
L graph_ui
L app_server
L outer_server
L graph_server
这是工作结构:
library(shiny)
library(tidyverse)
library(palmerpenguins)
# Start with the lower level, just plotOutput & renderPlot
graph_ui <- function(id) {
ns <- NS(id)
plotOutput(ns("graph"))
}
graph_server <- function(id, xcat, ycat) {
moduleServer(id, function(input, output, session) {
output$graph <- renderPlot({
ggplot(
penguins,
aes(
.data[[xcat]],
.data[[ycat]],
col = sex
)
) +
geom_point()
})
}
)
}
# Here is a container for the graph module
outer_ui <- function(id) {
ns <- NS(id)
tagList(
"some text - would contain other objects too, not just graphs",
graph_ui(ns("graph1")), # First use of the graph module
graph_ui(ns("graph2")) # Second use of the graph module
)
}
# Server counterpart
outer_server <- function(id) {
moduleServer(id, function(input, output, session) {
# Making the graphs happen
graph_server("graph1", xcat = "bill_length_mm", ycat = "bill_depth_mm")
graph_server("graph2", xcat = "flipper_length_mm", ycat = "bill_depth_mm")
}
)
}
# app ---------------------------------------------------------------------
ui <- fluidPage(
outer_ui("mod1")
)
server <- function(input, output, session) {
outer_server("mod1")
}
shinyApp(ui, server)
干杯, 科林