library(shiny)
# interfata utilizator
ui <- fluidPage()
# server
server <- function(input, output) {}
# rulare
shinyApp(ui = ui, server = server)
library(shiny)
# interfata utilizator
ui <- fluidPage('Text oarecare')
# server
server <- function(input, output) {}
# rulare
shinyApp(ui = ui, server = server)
Input - date de intrare;
Output - date de iesire;
sunt adaugate ca si argumente ale functiei fluidPage() folosind functii predefinite de input/output
ui <- fluidPage(
# *Input() ,
# *Output()
)
Exemplu de functie de input:
sliderInput(inputId='numar', label='Alegeti un numar',
value=25, min=1, max=100)
Daca rulam acest cod in linia de comanda obtinem codul HTML corespunzator:
<div class="form-group shiny-input-container">
<label class="control-label" for="numar">Alegeti un numar</label>
<input class="js-range-slider" id="numar" data-min="1" data-max="100" data-from="25" data-step="1" data-grid="true" data-grid-num="9.9" data-grid-snap="false" data-prettify-separator="," data-prettify-enabled="true" data-keyboard="true" data-keyboard-step="1.01010101010101" data-data-type="number"/>
</div>
Dar daca il adaug in fluidPage:
library(shiny)
# Define UI for application
ui <- fluidPage(
sliderInput(inputId = 'num',
label="Alegeti un numar",
value=25, min=1, max=100)
)
# Define server logic
server <- function(input, output) {}
# Run the application
shinyApp(ui = ui, server = server)
Obtin… (rulati)
In general functiile de Input (vezi Shiny Cheat Sheet) vor avea argumentele:
alte argumente specifice (de exemplu value, min, max)
pentru mai multe informatii: ?sliderInput
*Output() specifice (vezi Shiny Cheat Sheet);
Exemplu:
plotOutput('hist')
va reprezenta histograma ‘hist’.
Dar daca adaugam aceasta linie de cod in exemplul de mai sus si rulam
library(shiny)
# Define UI for application
ui <- fluidPage(
sliderInput(inputId = 'num',
label="Alegeti un numar",
value=25, min=1, max=100),
plotOutput('hist')
)
# Define server logic
server <- function(input, output) {}
# Run the application
shinyApp(ui = ui, server = server)
nu se va intampla nimic in plus pentru ca R nu stie cine e ‘hist’.
Recapitulare
Incepem de la sablon (sau de la o aplicatie exsitenta);
Adaugam elemente noi pe pagina ca si argumente ale functiei fluidPage();
Creem elemente reactive pe pagina folosind functii de *Input();
Afisam rezultate cu functii de tip *Output();
Facem legatura dintre ele in partea de server (in continuare)
server <- function(input, output){
}
unde input si output sunt liste cu componente pe care le apelam folosind semnul $.
Respectam urmatoarele reguli:
Regula 1
Salvam obiectele de afisat in output$:
output$hist <- #ceva cod care deseneaza o histograma
numele hist din output$hist este acelasi cu cel din
plotOutput('hist')
din ui (mai sus). Cand este referit in ui apare ca si sir de caractere, iar in partea de server ca si element al listei output.
Regula 2
Salvarea in output$ se face folosind functii render() care creeaza output-ul in format potrivit, corelat cu functia Output().
output$hist <- renderPlot(
{
#code R care creeaza o histograma
}
)
Regula 3
Facem legatura dintre valorile introduse in pagina cu functiile de Input() folosind input$ urmat de numele specificat in InputId:
Input$num este acelasi num din InputId='num'
Putem completa codul nostru:
library(shiny)
# Define UI for application
ui <- fluidPage(
sliderInput(inputId = 'num',
label="Alegeti un numar",
value=25, min=1, max=100),
plotOutput('hist')
)
# Define server logic
server <- function(input, output) {
output$hist <- renderPlot(
{
hist(rnorm(input$num))
}
)
}
# Run the application
shinyApp(ui = ui, server = server)
Avem acum o aplicatie Shiny completa pe care o putem rula.
aplicatiile au nevoie de un calculator pe care ruleaza R
pentru a distribui aplicatia pe un server Shiny trebuie sa:
script-ul R care contine codul shiny trebuie denumit app.R
sauin varianta cu fisierele ui.R si server.R (cand aplicatia e mai mare) acestea sa se regaseasca in director fix cu aceste denumire
server Shiny gratuit si usor de folosit din Rstudio.
creem cont, urmam indicatiile de pe site pentru a conecta calculatorul nostru de contul shinyapps.
folosim butonul Publish pentru a incarca aplicatiile pe server
Construiti aplicatii Shiny care sa:
Citeasca un numar de pe un sliderInput si sa afiseze patratul sau.
Sa citeasca doua numere folosind sliderInput si sa il afiseze pe cel mai mare
Citeste un text si afiseaza lungimea sa folosind textul
Lungimea textului este: …
Solutie:
library(shiny)
# interfata utilizator
ui <- fluidPage(
textInput(inputId = 'text',
label='Introduceti textul :)',
value=''),
numericInput(inputId = 'n',
label='Introduceti numarul n:',
value=3),
textOutput('textnOri')
)
# server
server <- function(input, output) {
output$textnOri <- renderText(
{
text=''
for ( i in 1:input$n){
text <- c(text,'\n', input$text)
}
sprintf(text)
}
)
}
# rulare
shinyApp(ui = ui, server = server)