Sablon

library(shiny)

# interfata utilizator 
ui <- fluidPage('Text oarecare')

# server
server <- function(input, output) {}

# rulare
shinyApp(ui = ui, server = server)

render* + *Output()

renderText() + textOutput()

textOutput()

  • text care poate fi inclus intr-un panel pe pagina

  • textul e inclus intr-un tag div (o sectiune/bloc din document HTML)

textOutput('text')
<div id="text" class="shiny-text-output"></div>
  • sau foloseste span (inline, pentru text mai scurt):
textOutput("caption", inline=TRUE)
<span id="caption" class="shiny-text-output"></span>

renderText()

returneaza un obiect R care poate fi folosit ca si argument a functiei cat() - intuitiv: linie de text

  • functia cat():
x=c(0,1)
y=c('dada','fafadsf')
cat(x,y)
## 0 1 dada fafadsf
z=c(x,y)
z
## [1] "0"       "1"       "dada"    "fafadsf"
z=cat(z)
## 0 1 dada fafadsf

iar in Shiny:

library(shiny)

ui <- fluidPage(
  h3('text oarecare'),
  textInput('textinput', value='', label='introduceti ceva text...'),
  textOutput('text')
)

server <- function(input, output){
  output$text <- renderText({
    x=c(0,1)
    y=input$textinput
    z='*** text fix, nereactiv ***'
    cat(x,y,z)
    z=c(x,y, z)
    z
  })
}

shinyApp(ui, server)

renderPrint() + verbatimTextOuput()

verbatimTextOutput()

returneaza un element de text verbatim care e inclus pe pagina web folosind tag-ul pre

  • functioneaza si cu renderText() si cu renderPrint()

renderPrint()

afiseaza o LISTA in format text

Exempu: Incarcati un fisier text si afisati continutul sau.

library(shiny)


ui <- fluidPage(
  fileInput(inputId = 'fisier', multiple=FALSE, label='Alegeti un fisier text', 
            buttonLabel = 'Navigati :)', 
            placeholder = 'si incarcati un fisier'),
  verbatimTextOutput('text')
  )

server <- function(input, output){
  output$text <- renderPrint({
    z <- read.csv(input$fisier$datapath, header=FALSE)
    z
  })
}

shinyApp(ui, server)

renderTable() + tableOutput()

tableOutput()

un element de tip tabel de inclus in pagina web

renderTable()

returneaza un element reactiv potrivit de reprezentat ca si tabel

Exemplu: Sa se citeasca un tabel si sa se afiseze continutul sau in format de tabel

library(shiny)


ui <- fluidPage(
  fileInput(inputId = 'fisier', multiple=FALSE, label='Alegeti un fisier text', 
            buttonLabel = 'Navigati :)',  
            accept = c(
              "text/csv",
              "text/comma-separated-values,text/plain",
              ".csv"),
            placeholder = 'si incarcati un fisier .csv'),
  tableOutput('tabel')
  )

server <- function(input, output){
  output$tabel <- renderTable({
    z <- read.csv(input$fisier$datapath, header=TRUE)
    z
  })
}

shinyApp(ui, server)

sau

  output$tabel <- renderTable({
    inFile <- input$fisier
    if (is.null(inFile))
      return(NULL)
    z <- read.csv(input$fisier$datapath, header=TRUE)
    z
  },  striped = TRUE)

sau

server <- function(input, output){
  output$tabel <- renderTable({
    inFile <- input$fisier
    if (is.null(inFile))
      return(NULL)
    z <- read.csv(input$fisier$datapath, header=TRUE)
    z
  },  hover = TRUE)
}

sau

  output$tabel <- renderTable({
    inFile <- input$fisier
    if (is.null(inFile))
      return(NULL)
    z <- read.csv(input$fisier$datapath, header=TRUE)
    z
  },  bordered = TRUE)

sau

  output$tabel <- renderTable({
    inFile <- input$fisier
    if (is.null(inFile))
      return(NULL)
    z <- read.csv(input$fisier$datapath, header=TRUE)
    z
  },  spacing='xs')

sau

server <- function(input, output){
  output$tabel <- renderTable({
    inFile <- input$fisier
    if (is.null(inFile))
      return(NULL)
    z <- read.csv(input$fisier$datapath, header=TRUE)
    z
  },  spacing='xs', align='clllcrrcc')
}

renderPlot() + plotOutput()

plotOutput()

plaseaza o imagine pe ui

Optiuni:
- width='100%'
- height='400px'

renderPlot()

returneaza o imagine redata de plotOutput()

  • imaginea trebuie sa fie creata in R
  • putem folosi ggplot2

Exemplu: Incarcati tabelul diamonds si reprezentati un nor de puncte cu variabilele carat si price, colorate diferit in functie de o variabila de tip factor din tabel la alegerea utilizatorului

library(shiny)
library(ggplot2)

ui <- fluidPage(
  radioButtons(inputId = 'variabila', label='alegeti variabila pentru colorare!',
              choices=c('cut'='2','color'='3','clarity'='4'), selected='2'),
  
  plotOutput('figura', width='50%')
)

server <- function(input, output){
  output$figura <- renderPlot({
    if (input$variabila=='2'){
    ggplot(aes(x=carat, y=price), data=diamonds)+
      geom_point(aes(color=cut))
    }
    else if (input$variabila=='3'){
      ggplot(aes(x=carat, y=price), data=diamonds)+
        geom_point(aes(color=color))
    }
    else ggplot(aes(x=carat, y=price), data=diamonds)+
      geom_point(aes(color=clarity))
  })
}

shinyApp(ui, server)

renderImage() si plotImage() functioneaza la fel, pentru diferente consultati documentatia Shiny.

Exemplu: incarcati un fisier cu o imagine si o afisati.

library(shiny)


ui <- fluidPage(
  fileInput(inputId = 'fisier', label='alegeti o imagnine'),
  imageOutput('imagine')
)

server <- function(input, output){
  output$imagine <- renderImage({
    list(src=input$fisier$datapath, alt='o imagine incarcata', width='100%')
  })
}

shinyApp(ui, server)

adaugarea unei imagini statice in ui:

imaginile trebuie salvate local intr-un director numit www.

library(shiny)

ui <- fluidPage(
  img(src='Chopinamqsop53.jpg', width='100%')
  
)

server <- function(input, output){
  
}

shinyApp(ui, server)

Exercitii

Construiti aplicatii Shiny care sa:

  1. Citeasca un tabel si sa afiseze variabilele lui.

  2. Citeasca un tabel si sa afiseze structura sa (verbatim).

  3. Citeasca un tabel si sa afiseze primele 10 linii si ultimele 10 linii.

  4. Citeasca un tabel si un numar n si sa afiseze primele n linii din tabel.

  5. Citeasca un tabel; sa afiseze lista de variabile din care utilizatorul sa selecteze mai multe iar apoi sa afiseze variabilele selectate ( se foloseste outputUI si renderUI)

  6. Incarca tabelul diamonds si reprezinta grafic boxplot-uri pentru variabilele x, y si z in functie de o variabila factor la alegere.

  7. Reprezinta grafic temperatura medie in Cluj Napoca intr-un interval la alegerea utilizatorului. Pentru a obtine istoricul temperaturilor cautati pe internet ( Cei care trimit rezolvarea acestui exercitiu pana la miezul noptii primesc un punct in plus la examen! )

Adaugati un logo (la alegere, in lipsa de altceva logo R ) la toate aplicatiile de mai sus.