• Undervisningsforløb
  • Materialer
  • SRO
  • SRP
  • Apps
  • Referencer
  • Om os

Data generator

#| '!! shinylive warning !!': |
#|   shinylive does not work in self-contained HTML documents.
#|   Please set `embed-resources: false` in your metadata.
#| standalone: true
#| viewerHeight: 600 
library(shiny)
library(bslib)
library(writexl)

ui <- page_fluid(
  layout_columns(
  card(card_header("Gen 1"),
         numericInput("m1", "Middelværdi:", 10),
         numericInput("s1", "Spredning:", 5, min = 0),
    ),
    card(card_header("Gen 2"),
         numericInput("m2", "Middelværdi:", 10),
         numericInput("s2", "Spredning:", 5, min = 0),
    ),
    card(card_header("Gen 3"),
         numericInput("m3", "Middelværdi:", 10),
         numericInput("s3", "Spredning:", 5, min = 0),
    ),
    card(card_header("Gen 4"),
         numericInput("m4", "Middelværdi:", 10),
         numericInput("s4", "Spredning:", 5, min = 0),
    ),
    card(card_header("Gen 5"),
         numericInput("m5", "Middelværdi:", 10),
         numericInput("s5", "Spredning:", 5, min = 0),
    ),
    card(card_header("Indstillinger"),
         numericInput("nsim", "Antal observationer:", 100, min = 1, max = 10000),
         actionButton("run", "Kør")),
    card(card_header("Data"),
         tableOutput("dataTable")),
    card(card_header("Download"),
         downloadButton("excel", "Download (Excel)"),
         downloadButton("csv", "Download (csv)")),
  col_widths = c(rep(2,6),10,2)
  )
)

server <- function(input, output) {
  dat <- reactiveVal()

  observeEvent(input$run, {
    sim <- data.frame(
        `Gen 1` = rnorm(input$nsim, mean = input$m1, sd = input$s1),
        `Gen 2` = rnorm(input$nsim, mean = input$m2, sd = input$s2),
        `Gen 3` = rnorm(input$nsim, mean = input$m3, sd = input$s3),
        `Gen 4` = rnorm(input$nsim, mean = input$m4, sd = input$s4),
        `Gen 5` = rnorm(input$nsim, mean = input$m5, sd = input$s5)
        ) |> round(2)

    dat(sim)

    output$dataTable <- renderTable({
      sim
    })
  })

  output$excel <- downloadHandler(
    filename = function() {
      paste("gen-data_", Sys.Date(), ".xlsx", sep = "")
    },
    content = function(file) {
      write_xlsx(dat(), file)
    }
  )

  output$csv <- downloadHandler(
    filename = function() {
      paste("gen-data_", Sys.Date(), ".csv", sep = "")
    },
    content = function(file) {
      write.csv(dat(), file, row.names = FALSE)
    }
  )
}

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