Sådan bygger du interaktive webapps med Shiny i R

Sadan Bygger Du Interaktive Webapps Med Shiny I R



Takket være R Shiny frameworket, et bundt fra RStudio, er det relativt nemt at skabe dynamiske webapps med R. Fordelen ved Shiny er, at det gør det muligt at lægge din R-kode på nettet, hvilket gør den mere tilgængelig for en bredere vifte af brugere. Med R Shiny kan du oprette meget kraftfulde datarapporter og visuals, der giver brugeren mulighed for at analysere datasættet. Sammen med Shiny-komponenter kan HTML-elementerne bruges til at designe programmets indhold. Dagens artikel leder dig gennem processen med at konstruere en interaktiv webapplikation, der anvender R's Shiny-pakke. Til dette skal du sørge for at have 'RStudio' installeret allerede.

Installer Shiny Package i RStudio

Før vi går i retning af at skabe en interaktiv webapplikation i RStudio, bør vi allerede have 'Shiny'-pakken installeret i den. Til dette skal du udvide menuen 'Værktøjer' i RStudio efterfulgt af indstillingen 'Installer pakker'. I det åbnede vindue skal du nævne den pakke, du vil installere, dvs. 'skinnende', og trykke på knappen 'Installer'. RStudio installerer den skinnende pakke i RStudio-konsollen.







Kom i gang med Shiny in R

For at komme i gang med Shiny in R, skal du oprette en ny R-fil ved hjælp af menuen 'Filer', der er placeret på førstepladsen i RStudio. Udvid den og brug indstillingen 'Ny fil' efterfulgt af indstillingen 'R Script'. Den 'navnløse' scriptfil vil blive åbnet i RStudio. Omdøb den til en 'R' fil på din ønskede placering.



Indlæs nu de nødvendige pakker, der kræves for at bygge en interaktiv applikation i R, dvs. brug 'bibliotek'-funktionen i R. 'if'-sætningerne bruges til at installere de pakker, der ikke tidligere var installeret. Shiny-pakken bruges til at bygge en interaktiv grænseflade til webapplikationer sammen med nogle grafiske visualiseringer. 'dplyr'-pakken bruges hovedsageligt til at lette datamanipulationen i R ved at bruge nogle nyttige funktioner.



Endelig er 'ggplot2'-pakken indlæst som en fantastisk kilde til datavisualisering ved at skabe tilpassede og kraftfulde grafer.





hvis ( ! kræver Navneområde ( 'skinnende' , lige så stille = RIGTIGT ) ) {

installere. pakker ( 'skinnende' )

}

hvis ( ! kræver Navneområde ( 'dplyr' , lige så stille = RIGTIGT ) ) {

installere. pakker ( 'dplyr' )

}

hvis ( ! kræver Navneområde ( 'ggplot2' , lige så stille = RIGTIGT ) ) {

installere. pakker ( 'ggplot2' )

}

bibliotek ( skinnende )

bibliotek ( dplyr )

bibliotek ( ggplot2 )

Byg et interaktivt eksamensbedømmelsessystem

Inden for denne øvelse vil vi oprette et 'Eksamenskaraktersystem', så eleverne kan få deres opnåede karakterer via de karakterer, der opnås ud af 100. Det medfølgende script er 'ui'-komponenten i en Shiny-app, som specificerer designet og udseendet af programmet. Programmet genererer en fluidPage, et tilpasningsdygtigt design, der kan skaleres for at tilpasse til browservinduet.

Et 'titlePanel' og et 'sidebarLayout' er afkom af 'fluidPage'. Programmets titel 'Eksamensbedømmelsessystem' er alt, hvad der vises i 'titelpanelet'. Et 'sidebarPanel' og et 'mainPanel' er de to sektioner, som 'sidebarLayout' bruger til at opdele applikationen i. Et par input er inkluderet i 'sidebarPanel': en 'textAreaInput' med navnet 'score' plus en 'actionButton' med navnet 'calculate'.



Der kan indtastes én score pr. linje for hver elev ved hjælp af 'textAreaInput'. Karakterbedømmelsen kan startes ved brug af 'actionButton'. Et par udgange er til stede i 'hovedpanelet': et 'tabelOutput' med navnet 'Resultat' plus et 'plotOutput' med navnet 'ResultGraph'. Både 'tableOutput' og 'plotOutput' vil præsentere beregningens resultater i form af en graf.

ui <- fluidPage (

titelpanel ( 'Eksamensbedømmelsessystem' ) ,
sidebjælkelayout (
sidebjælkepanel (
textAreaInput ( 'score' , 'Indtast resultater for elever (én pr. linje):' , '' ) ,
handlingsknap ( 'Beregn' , 'Lad os beregne karakterer' )
) ,
hovedpanel (
tabeloutput ( 'Resultat' ) ,
plotoutput ( 'ResultGraph' )
) ) )

Servermetoden etablerer applikationens serversidelogik. Karaktererne for studerende gemmes i første omgang i en reaktiv variabel kaldet 'data'. Til dette overvåges 'beregn'-knappen af ​​'observeEvent'-metoden af ​​R. Efter at knappen er udløst, konverterer koden i første omgang de værdier, der er indtastet i tekstfeltets input til numeriske værdier.

Hver score efterfølges af et linjeskift ved at bruge '\n' til at indtaste en ny score på den næste linje. Metoden placerer den score, den finder, i 'data'-variablen. Hvis en bruger ikke har indtastet nogen score, viser metoden en meddelelse med en fejl.

server <- fungere ( input, output ) {

data <- reaktivVal ( NUL )

observer Begivenhed ( input$beregn, {

score <- som. numerisk ( afliste ( strsplit ( input$score, ' \n ' ) ) )

hvis ( længde ( score ) > 0 ) {

data ( score )

} andet {

data ( NUL )

showModal ( modalDialog (

titel = 'Fejl' ,

'Fejl: Tilføj venligst værdi!' ,

letluk = RIGTIGT

) )

}

} )

To output, 'output$Result' plus 'output$ResultGraph', er specificeret for at vise elevernes karakterer og opnåede karakterer. Den dynamiske metode renderTable() producerer en datatabel over elevens testkarakterer og karakterer, som er mærket som 'output$Result'. renderPlot()-metoden, som ligeledes er reaktiv, genererer et søjlediagram for elevernes karakterer og gemmer det i 'output$ResultGraph'-outputtet på samme måde.

De vil derfor blive gennemgået hver gang inputdataene opdateres. Hvis (!is.null(data()))-udtrykket bestemmer, om de data, der modtages, er null eller ej. 'if'-sætningens script udføres, hvis det ikke er tomt. En vektor af score for elever udgør inputtet 'data'. Hver elev får en karakter baseret på deres score ved hjælp af case_when() metoden. En dataramme, der indeholder elevernes karakterer og testkarakterer, oprettes ved hjælp af data.frame()-metoden. Følgende kolonner tilføjes til datarammen: 'Student', 'Score' og 'Karakter'. Karakterfordelingen er kompileret i en tabel kaldet 'GradeCount' ved hjælp af table() metoden.

output$Resultat <- renderTabel ( {

hvis ( ! er. nul ( data ( ) ) ) {

karakterer <- tilfælde_hvornår (

data ( ) > 80 ~ 'EN' ,

data ( ) > 60 ~ 'B' ,

data ( ) > 40 ~ 'C' ,

data ( ) > 30 ~ 'D' ,

RIGTIGT ~ 'F'

)

data. ramme ( Studerende = 1 : længde ( data ( ) ) , Score = data ( ) , Karakter = karakterer )

}

} )

output$ResultGraph <- renderPlot ( {

hvis ( ! er. nul ( data ( ) ) ) {

karakterer <- tilfælde_hvornår (

data ( ) > 80 ~ 'EN' ,

data ( ) > 60 ~ 'B' ,

data ( ) > 40 ~ 'C' ,

data ( ) > 30 ~ 'D' ,

RIGTIGT ~ 'F'

)

GradeCount <- bord ( karakterer )

Søjlediagrammet oprettes ved hjælp af 'ggplot2'-biblioteket. Antal (det samlede antal elever, der har opnået hver karakter) og kolonnen Karakter oprettes i en DataFrame. Et søjlediagram med 'Grade'-dataene på 'x-aksen' og 'Count'-dataene på 'y-aksen' fremstilles ved hjælp af geom_bar()-metoden. Indstillingen stat = 'identitet' instruerer ggplot2 til at bruge de faktiske data uden nogen form for transformation. En titel, en x-akse-etiket og en y-akse-etiket tilføjes alle via 'labs'-metoden. Linjens farver tildeles ved hjælp af scale_fill_manual() metoden. Unødvendige gitterlinjer og overlejringskomponenter fjernes ved hjælp af metoden theme_minimal(). Metoden shinyApp(ui, server) bygger en app.

ggplot ( data = data. ramme ( karakter = navne ( GradeCount ) , Greve = som. numerisk ( GradeCount ) ) ,
aes ( x = Karakter, og = Tæl, fyld = karakter ) ) +
geom_bar ( stat = 'identitet' ) +
laboratorier ( titel = 'Karakterfordeling' ,
x = 'Karakter' ,
og = 'Tælle' ) +
scale_fill_manual ( værdier = c ( 'EN' = 'grøn' , 'B' = 'lilla' , 'C' = 'lyserød' ,
'D' = 'orange' , 'F' = 'rød' ) ) +
tema_minimal ( )
}
} )
}
skinnende App ( ui, server )

Da vi kørte denne kode, fik vi en interaktiv grænseflade, hvor vi tilføjede nogle karakterer og klikkede på knappen 'Lad os beregne karakterer'.

Tabellen, der indeholder elevernes karakterer og karakterer, vises efterfulgt af søjlediagrammet over karakterfordelingen i forskellige farver.

Konklusion

Denne vejledning forklarer vigtigheden af ​​Shiny-pakkens brug i R-sproget via RStudio. For at supplere vores forklaring konstruerede vi en interaktiv webapplikation til elevernes karaktersystem i R-koden ved at bruge 'Shiny'-pakken.