通常,从UI内部生成图形没有问题,用户会主动调用这些图形,但我注意到,当使用闪亮模块动态生成UI时,图形不会出现。
下面是一个复制问题的模块化闪亮应用程序的最小示例;当用户按下"go“按钮时,它应该生成一个包含情节的ui:
library("shiny")
exampleUI <- function(id, label = "example") {
ns <- NS(id)
tagList( actionButton(ns("go"), "Go"), uiOutput(ns("ui")) )
}
ui <- fluidPage( exampleUI("example") )
example <- function(input, output, session) {
observeEvent(input$go, {
output$plot <- renderPlot( plot(1:5, 1:5) )
output$ui <- renderUI( plotOutput("plot") )
})
}
server <- function(input, output) { callModule(example, "example") }
shinyApp(ui, server)
相反,非模块化版本的工作方式与预期的相同:
ui <- fluidPage(
tagList( actionButton("go", "Go"), uiOutput("ui") )
)
server <- function(input, output) {
observeEvent(input$go, {
output$plot <- renderPlot( plot(1:5, 1:5) )
output$ui <- renderUI( plotOutput("plot") )
})
}
shinyApp(ui, server)
我希望有任何关于如何使第一个代码块像第二个代码块那样工作的提示。
发布于 2016-08-07 20:01:05
library(shiny)
exampleUI <- function(id, label = "example") {
ns <- NS(id)
tagList( actionButton(ns("go"), "Go"), uiOutput(ns("ui")) )
}
example <- function(input, output, session) {
observeEvent(input$go, {
output$plot <- renderPlot( plot(1:5, 1:5) )
ns <- session$ns
output$ui <- renderUI( plotOutput(ns("plot")) )
})
}
ui <- fluidPage( exampleUI("example") )
server <- function(input, output, session) {
callModule(example, "example")
}
shinyApp(ui, server)
有两件事:
exampleUI
之前参考了它(在实际示例中,您可能会source
该模块,因此这不应该是一个问题)renderUI
时,需要将其包装在ns
中。请阅读有关在模块中使用renderUI的部分以获得更多信息https://stackoverflow.com/questions/38820375
复制相似问题