Создание динамических колодец в блестящей - PullRequest
0 голосов
/ 26 октября 2019

Я искал и пытался сделать панели в Shiny динамичными, но без радости. Под динамикой я подразумеваю, что они должны появляться только тогда, когда объекты, которые они будут содержать, созданы, а не раньше.

Ниже приведен воспроизводимый код для иллюстрации проблемы. Вы увидите, что еще до того, как будет показан какой-либо график, отображаются лунная панель и заголовок. Заголовок здесь - просто текст справки, и я могу сделать это реактивным, но не хорошей панелью. Если честно, это не влияет на функциональность приложения, но оно просто не красиво и сводит меня с ума.

library(shiny)

ui<- shinyUI(fluidPage(
  titlePanel("My example shiny"),
  fluidRow(
    column(3, wellPanel(
      numericInput("n", "N:", min = 0, max = 100, value = 50),
       actionButton("goButton", "Go!")  

    )),

    column(6,

           wellPanel(
           plotOutput("plot1", width = 400, height = 300),
           helpText("Caption: This text should appear at the same time as the plot and well"),
           #verbatimTextOutput("text")
           )
    )
  )
)
)


server <- function(input, output) {

  plot1 <- eventReactive(input$goButton, {
     hist(rnorm(input$n))   

    })


   output$plot1 <- renderPlot({
     plot1()

      })

}

shinyApp(ui = ui, server = server)

Приложение будет иметь несколько скважинных панелей, и было бы неплохо, чтобы на начальном экране не было пустых панелей, если бы это создавало впечатление, что что-то не так.

Любой указатель будетбыть высоко оценен. Приветствия

1 Ответ

1 голос
/ 27 октября 2019

Хотелось бы что-нибудь подобное для вас, используя conditionalPanel?

library(shiny)

ui<- shinyUI(fluidPage(
  titlePanel("My example shiny"),
  fluidRow(
    column(3, wellPanel(
      numericInput("n", "N:", min = 0, max = 100, value = 50),
      actionButton("goButton", "Go!")  
    )),
    column(6,
           conditionalPanel("output.hide_panel",
              wellPanel(
                plotOutput("plot1", width = 400, height = 300),
                helpText("Caption: This text should appear at the same time as the plot and well")
              )
           )
    )
  )
))

server <- function(input, output) {

  output$hide_panel <- eventReactive(input$goButton, TRUE, ignoreInit = TRUE)
  outputOptions(output, "hide_panel", suspendWhenHidden = FALSE)

  plot1 <- eventReactive(input$goButton, {
    hist(rnorm(input$n))   
  })

  output$plot1 <- renderPlot({
    plot1()
  })

}

shinyApp(ui = ui, server = server)
...