Раздельный расчет и черчение в R Shiny - PullRequest
0 голосов
/ 07 мая 2019

Я хотел бы создать блестящее приложение, которое запускает симуляцию и затем показывает 3 графика результатов (я настроил их с помощью tabsetPanel()).Коду нужно несколько секунд для запуска, поэтому я сделал submitButton().Теперь, когда код занимает больше времени, я хочу, чтобы он запускался только один раз, а затем отображал 3 графика.Как запустить код с входными значениями, извлечь 5 векторов результата и только потом построить их?

В настоящее время «блестящий» выдает ошибку, потому что когда код не находится в пределах части output$plot <- renderPlot({ ...}), он не реагирует.

То, что у меня до сих пор выглядит, выглядит так:

ui <- fluidPage(
titlePanel("My Simulation"),
submitButton(text="RUN SIMULATION")

  mainPanel(
    tabsetPanel(
      tabPanel("Plot 1", plotOutput("p1")), 
      tabPanel("Plot 2", plotOutput("p2")), 
      tabPanel("Plot 3", plotOutput("p3"))
    )
  )
)


server <- function(input, output) {
  v<-reactiveValues(v1=0,v2=0,v3,v4=0,v5=0)
  observeEvent(input,{ myFunction()})

output$p1<-renderPlot{
  plot(v1,v2)
}

output$p2<-renderPlot{
  plot(v1,v3)
}

output$p3<-renderPlot{
  plot(v1,v4)
  lines(v1,v4)
}

shinyApp(ui, server)

1 Ответ

1 голос
/ 07 мая 2019

На самом деле это отдельно. Чтобы сделать сюжет реактивным, вы должны ссылаться на reactiveValues() как v$v1, v$v2, ... Он был назначен на v, поэтому вам также придется ссылаться на него таким образом. Вы можете фактически сравнить reactiveValues() с data.frame() или более как список, который реагирует. Список v <- list(v1 = 1), который вы также называете v$v1, ...

Воспроизводимый пример:

library(shiny)

ui <- fluidPage(
  titlePanel("My Simulation"),
  actionButton(inputId = "simulate", label = "simulate"),

  mainPanel(
    tabsetPanel(
      tabPanel("Plot 1", plotOutput("p1")), 
      tabPanel("Plot 2", plotOutput("p2")), 
      tabPanel("Plot 3", plotOutput("p3"))
    )
  )
)


server <- function(input, output) {

  v <- reactiveValues(v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0)

  observeEvent(input$simulate,{ 
    v$v1 <- 1
    v$v2 <- 2
    v$v3 <- 3
    v$v4 <- 4
  })

  output$p1<-renderPlot({
    plot(v$v1, v$v2)
  })

  output$p2<-renderPlot({
    plot(v$v1, v$v3)
  })

  output$p3<-renderPlot({
    plot(v$v1, v$v4)
    lines(v$v1, v$v4)
  })
}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...