Parametri de utilizator pentru aplicații strălucitoare

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

(Acest articol a fost publicat pentru prima dată pe Jason Bryerș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.

tl; dr

Odată login Pachetul este instalat, puteți rula două demo -uri folosind următoarele comenzi:

Rețineți că aceasta este postată încrucișată cu o vinie în login Pachet R. Pentru cea mai actualizată versiune, accesați aici: https://jbryer.github.io/login/articles/paramaters.html Comentarii pot fi direcționate către mine pe mastodon la @jbryer@vis.Social.

Introducere

Shiny este un instrument incredibil pentru analiza interactivă a datelor. Pentru marea majoritate a aplicațiilor strălucitoare pe care le -am dezvoltat, fac o alegere cu privire la starea implicită a aplicației, dar ofer o mulțime de opțiuni pentru utilizator pentru a schimba și/sau personaliza analiza. Cu toate acestea, există situații în care aplicația ar fi mai bună dacă utilizatorul ar fi obligat să introducă anumiți parametri. Conceptual, deseori mă gândesc la aplicații strălucitoare ca la o versiune interactivă a unei funcții, o funcție cu mulți parametri, unii dintre care utilizatorul trebuie să definească parametrii impliciti. Această vinie descrie un modul strălucitor în care un set de parametri trebuie să fie setat înainte ca utilizatorul să se implice cu aplicația principală strălucitoare, iar aceste setări pot fi salvate opțional ca cookie -uri pentru a fi utilizate în sesiuni. Chiar dacă aceasta este principala motivație pentru acest modul strălucitor, acesta poate fi folosit și ca cadru pentru salvarea preferințelor utilizatorului în care starea de economisire a serverului strălucitor nu este posibilă (de exemplu, atunci când este implementat pe www.shinyapps.io).

Modulul de parametri utilizator face parte din login Pachet R. Scopul este de a prezenta utilizatorului un set de parametri într -un dialog modal pe măsură ce aplicația strălucitoare se încarcă. Interfața principală este prin intermediul userParamServer() funcție care poate fi inclusă în codul serverului. Următorul este un exemplu de bază.

params <- userParamServer(
    id = 'example',
    params = c('name', 'email'),
    param_labels = c('Your Name:', 'Email Address:'),
    param_types = c('character', 'character'),
    intro_message="This is an example application that asks the user for two parameters."),
    validator = my_validator

Ca toate modulele strălucitoare, id Parametrul este un identificator unic conectat logica serverului la componentele UI. params Parametrul este un vector de caractere pentru numele parametrilor pe care utilizatorii trebuie să -l introducă. Aceștia sunt singurii doi parametri necesari. În mod implicit, toți parametrii vor presupune că sunt caractere folosind shiny::textInput() funcţie. Cu toate acestea, modulul acceptă mai multe tipuri de intrare, inclusiv:

  • date – Valorile datei
  • integer – Valori întregi
  • numeric – Valori numerice
  • file – Încărcări de fișiere (Rețineți că valoarea va fi calea către locul în care este încărcat fișierul)
  • select – selecția derulantă. Acest tip necesită informații suplimentare în raport cu input_params Parametrul discutat din urmă.

Cele de mai sus vor prezenta utilizatorului un dialog modal imediat când aplicația strălucitoare pornește așa cum este descris mai jos.

Valorile pot fi apoi preluate din params obiect, care este descris în figura de mai jos.

userParamServer() Funcția returnează a shiny::reactiveValues() obiect. Drept urmare, orice cod care folosește aceste valori ar trebui să fie actualizat automat dacă valorile se schimbă.

Există două componente UI, în special showParamButton() şi clearParamButton() butoane. Prima va afișa dialogul modal care permite utilizatorului să schimbe valorile. Acesta din urmă va șterge toate valorile setate (inclusiv cookie -urile dacă sunt activate).

Cookie -uri

Este posibil să salvați valorile parametrilor utilizatorului în sesiune, salvându -le la cookie -uri (atât timp cât allow_cookies = TRUE) Dacă allow_cookies parametrul este TRUEutilizatorul poate opta în continuare pentru a nu salva valorile ca cookie -uri. Este recomandat să setați cookie_password valoare astfel încât valorile cookie -urilor să fie criptate. Această caracteristică folosește pachetul cookie -uri și necesită asta cookies::cookie_dependency() este loc undeva în UI strălucitor.

Demo strălucitor complet

Cifrele de mai sus sunt din aplicația strălucitoare oferită mai jos.

library(shiny)
library(login)
library(cookies)

#' Simple email validator.
#' @param x string to test.
#' @return TRUE if the string is a valid email address.
is_valid_email <- function(x) {
    grepl("\<(A-Z0-9._%+-)+@(A-Z0-9.-)+\.(A-Z){2,}\>", as.character(x), ignore.case=TRUE)
}

#' Custom validator function that also checks if the `email` field is a valid email address.
my_validator <- function(values, types) {
    spv <- simple_parameter_validator(values)
    if(!is.logical(spv)) {
        return(spv)
    } else {
        if(is_valid_email(values(('email')))) {
            return(TRUE)
        } else {
            return(paste0(values(('email')), ' is not a valid email address.'))
        }
    }
    return(TRUE)
}

ui <- shiny::fluidPage(
    cookies::cookie_dependency(),  # Necessary to save/get cookies
    shiny::titlePanel('Parameter Example'),
    shiny::verbatimTextOutput('param_values'),
    showParamButton('example'),
    clearParamButton('example')
)

server <- function(input, output) {
    params <- userParamServer(
        id = 'example',
        validator = my_validator,
        params = c('name', 'email'),
        param_labels = c('Your Name:', 'Email Address:'),
        param_types = c('character', 'character'),
        intro_message="This is an example application that asks the user for two parameters.")

    output$param_values <- shiny::renderText({
        txt <- character()
        for(i in names(params)) {
            txt <- paste0(txt, i, ' = ', params((i)), 'n')
        }
        return(txt)
    })
}

shiny::shinyApp(ui = ui, server = server, options = list(port = 2112))

Validare

validator Parametrul SPEICIES O funcție de validare pentru a se asigura că parametrii introduși de utilizator sunt valabili. Valoarea implicită a simple_parameter_validator() Pur și simplu se asigură că au fost introduse valori. Aplicația strălucitoare de mai sus extinde acest lucru verificând, de asemenea, pentru a vedea dacă adresa de e -mail pare să fie valabilă.

Funcțiile de validare trebuie să respecte următoarele:

  1. Trebuie să ia doi parametri: values care este un vector de caracter pe care utilizatorul l -a introdus și types care este un vector de caracter al tipurilor descrise mai sus.

  2. Reveni TRUE Dacă ValidaIton trece sau un șir de caractere care descrie de ce validarea a eșuat. Acest mesaj va fi afișat utilizatorului.

Dacă funcția de validare returnează altceva decât TRUE Va fi afișat dialogul modal.

Personalizarea intrărilor strălucitoare

input_params Parametrul permite personalizarea ulterioară a diferitelor intrări strălucitoare. În special, puteți pune pe oricare altul shiny::xxxInput Parametri într -o listă. Pentru select tipuri de intrare choices parametrul este necesar. Următorul șablon oferă structura de bază:

input_params = list(PARAM1 = list(choices = c('Option A', 'Option B')), # When select is the type
                    PARAM2 = list(min = 0, max = 10, stap = 1)) # When numeric or integer is the type

Exemplu de intrare a fișierului

Următoarea aplicație strălucitoare demonstrează modul de utilizare a funcțiilor de selecție a încărcării fișierelor și a derulant.

library(shiny)
library(login)
library(cookies)

#' Custom validator function that also checks if the `file` field is a valid CSV file.
my_validator <- function(values, types) {
    spv <- simple_parameter_validator(values)
    if(!is.logical(spv)) {
        return(spv)
    } else {
        if(!file.exists(values$file)) {
            return('File does not exists. Try uploading again.')
        } else if(!tools::file_ext(values$file) %in% c('csv', 'xslx')) {
            return('Only CSV and XLSX files supported.')
        }
    }
    return(TRUE)
}

ui <- shiny::fluidPage(
    cookies::cookie_dependency(),  # Necessary to save/get cookies
    shiny::titlePanel('Data Viewer'),
    showParamButton('csvviewer'),
    clearParamButton('csvviewer'),
    DT::DTOutput('data_table')
)

server <- function(input, output) {
    params <- userParamServer(
        id = 'csvviewer',
        validator = my_validator,
        params = c('filetype', 'file'),
        param_labels = c('File type', 'URL to a CSV file:'),
        input_params = list("filetype" = list("choices" = c("", "CSV" = "csv", "Excel" = "xlsx"))),
        param_types = c('select', 'file'),
        intro_message="This application will view a spreadsheet as a data table.")

    output$data_table <- DT::renderDT({
        df <- data.frame()
        if(file.exists(params$file)) {
            if(params$filetype == 'csv') {
                df <- read.csv(params$file)
            } else if(params$filetype == 'xlsx') {
                df <- readxl::read_excel(params$file)
            }
        }
        return(df)
    })
}

shiny::shinyApp(ui = ui, server = server, options = list(port = 2112))

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.