Сделать объект, созданный внутри одного реактивного объекта, доступным для другого в блестящем [дубликате]

На этот вопрос уже есть ответ:

Установить глобальный объект в Shiny 1 ответ

У меня блестящее приложение, в котором я определяю объект на основе ползунков и создаюdata.frame от него. Это используется для создания графика, ниже которого я хотел бы включить сводную таблицу. Моя проблема в том, что график должен быть определен внутри реактивного объекта для обновления на основе ползунков, но я обнаружил, что при попытке получить доступ к объекту, чтобы напечатать сводку внутридруго реактивный объект не найден.

Я бы не хотел дважды проходить один и тот же код расчета, чтобы вставить объект в другой реактивный объект. Мои две первоначальные идеи:

Я пытался использоватьsave(object, file = "...") внутри первого реактивного объекта, а затем положитьload(file = "...") внутри второго, но не обновляется. Я думал об определении моего объекта вне моего реактивногоplotOutput определение, но я уверен, что оно не будет обновляться при изменении пользовательских данных; он просто останется со значением начальногоinput настройки объекта по умолчанию.

Ну, просто пошел дальше и попробовал последнюю идею, и она даже не зашла так далеко:

Я поставил это передshinyServer(...) и он не может сгенерировать данные, потому что мой звонок зависит отinput и он не знает оinput в таком случае Я положил его послеshinyServer(...) но преждеrenderPlot(...) чтобы попытаться сделать своего рода «глобально доступный» объект для всех выходных объектов, и это ругает меня за попытку сделать что-то, использующееinput вне реактивной функции.

Вот пример для иллюстрации, модифицированный от Shiny's "Привет, Блестящий!" приме:

Ui.R

library(shiny)

# Define UI for application that plots random distributions 
shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Hello Shiny!"),

  # Sidebar with a slider input for number of observations
  sidebarPanel(
    sliderInput("obs", 
                "Number of observations:", 
                min = 1,
                max = 1000, 
                value = 500)
  ),

  # Show a plot of the generated distribution
  mainPanel(
    plotOutput("distPlot"),
    tableOutput("summary")
  )
))

Server.R

library(shiny)

# Define server logic required to generate and plot a random distribution
shinyServer(function(input, output) {

  output$distPlot <- renderPlot({

    # generate an rnorm distribution and plot it
    dist <- rnorm(input$obs)
    hist(dist)
  })

  output$summary <- renderTable({
    #dist <- rnorm(input$obs)
    summary <- table(data.frame(cut(dist, 10)))
  })
})

Если ты запустишь все как есть,cut сгенерирует ошибку, потому что не знает оdist. Если вы раскомментируете строку, где мы переопределимdist как сделано вplotOutput, тогда это будет работать.

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

Suggestions?

Ответы на вопрос(1)

Ваш ответ на вопрос