Как создать реактивный вывод из другого реактивного вывода в приложении R Shiny?

#r #shiny

#r #блестящий

Вопрос:

Изображение блестящего вывода приложения. Таблица, из которой я хочу получить данные, находится справа

Как хранить и повторно использовать реактивные данные для создания нескольких выходных данных в Shiny?

Я хочу создать другой вывод, который отображает информацию, такую как наиболее прибыльная пробная версия или процентное количество раз, когда игрок получил BJ от этой симуляции. Код использует входные данные для запуска моей функции simulateBlackjack, которая является случайной. Я думаю, что мне нужно сохранить результаты simulateBlackjack(), чтобы я мог использовать данные, как я могу это сделать?

 library(shiny)

ui <- fluidPage(

    # Application title
    titlePanel("Blackjack 'Perfect Strategy' Simulation"),

    sidebarLayout(
        sidebarPanel(
            numericInput("wager", "How much to wager per hand?", 5,
                         1, 1000), 
            sliderInput("hands",
                        "Number of hands to play:",
                        min = 1,
                        max = 1000,
                        value = 50),
            
            sliderInput("decks",
                        "Number of decks:",
                        min = 4,
                        max = 8,
                        value = 8),
            img(src = "https://wizardofodds.com/blackjack/images/bj_4d_h17.gif", width = 225, height = 600)
            
            
        ),
        

        mainPanel(
          dataTableOutput(outputId = "simResults"),
          verbatimTextOutput(outputId = "analysis")
          
        )
    )
)


server <- function(input, output) {

    reactData <- reactive({simulateBlackjack(input$wager,input$hands,input$decks)})
    #data <- reactData()
    
    output$simResults <- DT::renderDataTable({
        datatable(reactData(), rownames = TRUE, options = list(pageLength = 13, lengthChange = FALSE))
    })
    
    # output$analysis <- renderPrint(max(data[13,])) 
    
}

# Run the application 
shinyApp(ui = ui, server = server)
 

Комментарии:

1. Это не reprex, пожалуйста, создайте функцию, которая, по крайней мере, дает результат вместо блэкджека

Ответ №1:

Попробуйте это:

 library(shiny)   

ui <- fluidPage(
  
  # Application title
  titlePanel("Blackjack 'Perfect Strategy' Simulation"),
  
  sidebarLayout(
    sidebarPanel(
      numericInput("wager", "How much to wager per hand?", 5,
                   1, 1000), 
      sliderInput("hands",
                  "Number of hands to play:",
                  min = 1,
                  max = 1000,
                  value = 50),
      
      sliderInput("decks",
                  "Number of decks:",
                  min = 4,
                  max = 8,
                  value = 8),
      img(src = "https://wizardofodds.com/blackjack/images/bj_4d_h17.gif", width = 225, height = 600)
    ),
    mainPanel(
      dataTableOutput(outputId = "simResults"),
      verbatimTextOutput(outputId = "analysis")
      
    )
  )
)


server <- function(input, output) {
  
  reactData <- reactive({
    req(input$wager,input$hands,input$decks)
    simulateBlackjack(input$wager,input$hands,input$decks)
  })
  
  output$simResults <- DT::renderDataTable({
    datatable(reactData(), rownames = TRUE, options = list(pageLength = 13, lengthChange = FALSE))
  })
  
  output$analysis <- renderPrint(
    max(reactData()[13,])
  ) 
  
}

# Run the application 
shinyApp(ui = ui, server = server)