Adăugarea parametrilor aplicației Shiny la adresa URL

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe pacha.dev/blogși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Shiny permite utilizarea tuturor R pentru a vizualiza informațiile, indiferent dacă este un model statistic sofisticat sau un complot simplu. Una dintre caracteristicile pe care nu le oferă în afara casei este adăugarea parametrilor selectați la adresa URL, astfel:

https://pacha.dev/palmerpenguinsshiny?inputs&species="Adelie"&island="Torgersen"

Pentru a avea acest tip de adresă URL, voi demonstra un caz simplu Golem. Să începem prin crearea unui proiect:

golem::create_golem("palmerpenguinsshiny")

Deschide R/run_app.R și schimbare enableBookmarking = NULL la enableBookmarking = "url".

Deschide R/app_server.R și adăugați aceste linii la sfârșitul app_server():

# Bookmarking ----

observe({
    # Trigger this observer every time an input changes
    # strip shiny related URL parameters
    shiny::reactiveValuesToList(input)
    setBookmarkExclude(c(
        "parameter_not_in_url"
    ))
    session$doBookmark()
})

onBookmarked(function(url) {
    updateQueryString(url)
})

Acum trebuie să adăugăm conținut în aplicație. Să creăm o aplicație care să permită utilizatorului să filtreze pe specii și pe insulă pentru a obține un complot al distribuției de masă corporală.

Iată o scurtătură pentru a simplifica lucrurile și a utiliza operatorul de conducte:

usethis::use_pipe()
devtools::document()

Creați o copie a datelor de care avem nevoie:

penguins_sib <- palmerpenguins::penguins(, c("species", "island", "body_mass_g"))
usethis::use_data(penguins_sib)

Acum să adăugăm conținut la app_server()ca aceasta:

#' The application server-side
#'
#' @param input,output,session Internal parameters for {shiny}.
#'     DO NOT REMOVE.
#' @import shiny
#' @import ggplot2
#' @importFrom dplyr filter
#'
#' @noRd
app_server <- function(input, output, session) {
  # Main plot ----

  # Filter by species and island, then show the distribution of body_mass_g
  output$main_plot <- renderPlot({
    req(input$species, input$island)
    penguins_sib %>%
      filter(
        species %in% input$species,
        island %in% input$island
      ) %>%
      ggplot(aes(x = body_mass_g)) +
      geom_histogram(bins = input$bins, fill = input$fill, color = "black") +
      labs(
        title = "Distribution of Body Mass (g)",
        x = "Body Mass (g)",
        y = "Count"
      ) +
      theme_minimal(base_size = 13)
  })

  # Bookmarking ----

  observe({
    # Trigger this observer every time an input changes
    # strip shiny related URL parameters
    shiny::reactiveValuesToList(input)
    setBookmarkExclude(c(
      "fill"
    ))
    session$doBookmark()
  })

  onBookmarked(function(url) {
    updateQueryString(url)
  })
}

Treceți logica serverului pe partea UI:

#' The application User-Interface
#'
#' @param request Internal parameter for `{shiny}`.
#'     DO NOT REMOVE.
#' @import shiny
#' @noRd
app_ui <- function(request) {
  tagList(
    # Leave this function for adding external resources
    golem_add_external_resources(),
    # Your application UI logic
    
    # Filters

    sidebarLayout(
      sidebarPanel(
        selectInput("species", "Select Species:", choices = unique(penguins$species), multiple = TRUE),
        selectInput("island", "Select Island:", choices = unique(penguins$island), multiple = TRUE),
        selectInput("fill", "Select Fill Color:", choices = c("#3d809d", "#d04e66", "#365158"),
          multiple = FALSE, selected = "#3d809d"),
        sliderInput("bins", "Number of Bins:", min = 1, max = 50, value = 30)
      ),
      mainPanel(
        plotOutput("main_plot")
      )
    )
  )
}

#' Add external Resources to the Application
#'
#' This function is internally used to add external
#' resources inside the Shiny application.
#'
#' @import shiny
#' @importFrom golem add_resource_path activate_js favicon bundle_resources
#' @noRd
golem_add_external_resources <- function() {
  add_resource_path(
    "www",
    app_sys("app/www")
  )

  tags$head(
    favicon(),
    bundle_resources(
      path = app_sys("app/www"),
      app_title = "palmerpenguins"
    )
    # Add here other external resources
    # for example, you can add shinyalert::useShinyalert()
  )
}

Acum rulează:

devtools::load_all()
run_app()

Ar trebui să vedeți aplicația dvs. funcționând la nivel local, iar atunci când selectați cele două câmpuri necesare (specii și insulă), vor exista un complot redat și o adresă URL a formei:

http://127.0.0.1:6736/?_inputs_&species=%22Adelie%22&island=%22Biscoe%22&bins=30

Rețineți că culoarea de umplere nu se află în adresa URL, dar aceasta este intenționată 🙂

Codul complet este aici: https://github.com/pachadotdev/palmerpenguinsshiny.

Nu uitați să adăugați o licență în aplicația dvs. (de exemplu, deschideți dev/01_start.R Pentru a selecta licența MIT sau pentru a utiliza Apache cu usethis::use_apache_license())

Dacă această resursă v -a fost utilă, vă rugăm să luați în considerare donarea aici: https://buymeacoffee.com/pacha.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.