Hvordan bygge interaktive nettapper med Shiny in R

Hvordan Bygge Interaktive Nettapper Med Shiny In R



På grunn av R Shiny-rammeverket, en pakke fra RStudio, er det relativt enkelt å lage dynamiske nettapper med R. Fordelen med Shiny er at den gjør det mulig å legge R-koden din på nettet, noe som gjør den mer tilgjengelig for et bredere spekter av brukere. Med R Shiny kan du lage svært kraftige datarapporter og grafikk som lar brukeren analysere datasettet. Sammen med Shiny-komponenter kan HTML-elementene brukes til å designe programmets innhold. Dagens artikkel leder deg gjennom prosessen med å konstruere en interaktiv nettapplikasjon som bruker Rs Shiny-pakke. For dette, sørg for å ha 'RStudio' installert allerede.

Installer Shiny Package i RStudio

Før vi går mot å lage en interaktiv nettapplikasjon i RStudio, bør vi ha 'Shiny'-pakken allerede installert i den. For dette må du utvide 'Verktøy'-menyen til RStudio etterfulgt av alternativet 'Installer pakker'. I det åpne vinduet må du nevne pakken du vil installere, det vil si 'skinnende', og trykk på 'Installer' -knappen. RStudio vil installere den skinnende pakken i RStudio-konsollen.







Kom i gang med Shiny in R

For å komme i gang med Shiny in R, må du opprette en ny R-fil ved å bruke 'Fil'-menyen som ligger på første plass i RStudio. Utvid den og bruk alternativet 'Ny fil' etterfulgt av alternativet 'R Script'. Den 'navnløse' skriptfilen vil bli åpnet i RStudio. Gi den nytt navn til en 'R'-fil på ønsket plassering.



Last nå de nødvendige pakkene som kreves for å bygge en interaktiv applikasjon i R, dvs. bruk 'bibliotek'-funksjonen til R. 'if'-setningene brukes til å installere pakkene som ikke var installert tidligere. Shiny-pakken brukes til å bygge et interaktivt grensesnitt for webapplikasjoner sammen med noen grafiske visualiseringer. 'dplyr'-pakken brukes hovedsakelig for å lette datamanipulasjonen i R ved å bruke noen nyttige funksjoner.



Til slutt er 'ggplot2'-pakken lastet inn som en flott kilde til datavisualisering ved å lage tilpassede og kraftige grafer.





hvis ( ! requireNamespace ( 'skinnende' , stille = EKTE ) ) {

installere. pakker ( 'skinnende' )

}

hvis ( ! requireNamespace ( 'dplyr' , stille = EKTE ) ) {

installere. pakker ( 'dplyr' )

}

hvis ( ! requireNamespace ( 'ggplot2' , stille = EKTE ) ) {

installere. pakker ( 'ggplot2' )

}

bibliotek ( skinnende )

bibliotek ( dplyr )

bibliotek ( ggplot2 )

Bygg et interaktivt eksamenskaraktersystem

I denne opplæringen vil vi lage et 'eksamenskaraktersystem' for at elevene skal få sine oppnådde karakterer via karakterene som er oppnådd av 100. Skriptet som følger med er 'ui'-komponenten i en skinnende app som spesifiserer designet og utseendet til programmet. Programmet genererer en fluidPage, et tilpasningsdyktig design som kan skaleres for å justere for nettleservinduet.

Et 'titlePanel' og en 'sidebarLayout' er avkom av 'fluidPage'. 'Eksamenskaraktersystem'-tittelen til programmet er alt som vises i 'tittelpanelet'. Et 'sidebarPanel' og et 'mainPanel' er de to delene som 'sidebarLayout' bruker til å dele applikasjonen inn i. Et par innganger er inkludert i 'sidebarPanel': en 'textAreaInput' kalt 'score' pluss en 'actionButton' kalt 'calculate'.



En poengsum per linje kan legges inn for hver elev ved å bruke 'textAreaInput'. Karaktervurderingen kan startes ved bruk av 'actionButton'. Et par utganger er til stede i 'hovedpanelet': en 'tabellOutput' kalt 'Result' pluss en 'plotOutput' kalt 'ResultGraph'. Både 'tableOutput' og 'plotOutput' vil presentere beregningens funn i form av en graf.

ui <- fluidPage (

tittelpanel ( 'Eksamenskaraktersystem' ) ,
sidebarLayout (
sidepanelpanel (
textAreaInput ( 'score' , 'Skriv inn poeng for studenter (én per linje):' , '' ) ,
handlingsknapp ( 'regne ut' , 'La oss beregne karakterer' )
) ,
hovedpanel (
tabellOutput ( 'Resultat' ) ,
plotOutput ( 'ResultGraph' )
) ) )

Servermetoden etablerer applikasjonens serversidelogikk. Karakterene for studenter lagres i utgangspunktet i en reaktiv variabel kalt 'data'. For dette overvåkes «beregn»-knappen av «observeEvent»-metoden til R. Etter at knappen er utløst, konverterer koden først verdiene som er angitt i tekstfeltet til numeriske verdier.

Hver poengsum etterfølges av et linjeskift ved å bruke '\n' for å legge inn en ny poengsum på neste linje. Metoden plasserer den poengsummen den finner i 'data'-variabelen. Hvis en bruker ikke har lagt inn noen poengsum, viser metoden en melding med en feil.

server <- funksjon ( input, output ) {

data <- reactiveVal ( NULL )

observereEvent ( input$calculate, {

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

hvis ( lengde ( score ) > 0 ) {

data ( score )

} ellers {

data ( NULL )

showModal ( modalDialog (

tittel = 'Feil' ,

'Feil: Vennligst legg til verdi!' ,

easyClose = EKTE

) )

}

} )

To utganger, 'output$Result' pluss 'output$ResultGraph', er spesifisert for å vise elevkarakterer og oppnådde karakterer. Den dynamiske metoden renderTable() produserer en datatabell over studentens testkarakterer og karakterer som er merket som 'output$Result'. renderPlot()-metoden, som også er reaktiv, genererer et søylediagram for studentkarakterer og lagrer det i 'output$ResultGraph'-utgangen på samme måte.

De vil derfor bli vurdert hver gang inndataene oppdateres. If (!is.null(data()))-uttrykket bestemmer om dataene som mottas er null eller ikke. Skriptet til 'if'-setningen utføres hvis det ikke er tomt. En vektor av poengsum for studenter utgjør input 'data'. Hver student får en karakter basert på deres poengsum ved hjelp av case_when()-metoden. En dataramme som inneholder elevkarakterene og testkarakterene er opprettet ved hjelp av data.frame()-metoden. Følgende kolonner legges til i datarammen: 'Student', 'Poengsum' og 'Karakter'. Karakterfordelingen er kompilert i en tabell kalt 'GradeCount' ved å bruke table()-metoden.

output$Resultat <- gjengi tabell ( {

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

karakterer <- case_when (

data ( ) > 80 ~ 'EN' ,

data ( ) > 60 ~ 'B' ,

data ( ) > 40 ~ 'C' ,

data ( ) > 30 ~ 'D' ,

EKTE ~ 'F'

)

data. ramme ( Student = 1 : lengde ( data ( ) ) , Score = data ( ) , Karakter = karakterer )

}

} )

output$ResultGraph <- renderPlot ( {

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

karakterer <- case_when (

data ( ) > 80 ~ 'EN' ,

data ( ) > 60 ~ 'B' ,

data ( ) > 40 ~ 'C' ,

data ( ) > 30 ~ 'D' ,

EKTE ~ 'F'

)

Karaktertelling <- bord ( karakterer )

Stolpediagrammet lages ved å bruke 'ggplot2'-biblioteket. Count (totalt antall elever som oppnådde hver karakter) og kolonnen Karakter opprettes i en DataFrame. Et søylediagram med 'Grade'-data på 'x-aksen' og 'Count'-data på 'y-aksen' produseres ved å bruke geom_bar()-metoden. Alternativet stat = 'identity' instruerer ggplot2 til å bruke de faktiske dataene uten noen form for transformasjon. En tittel, en x-akseetikett og en y-akseetikett legges til via 'labs'-metoden. Linjens farger tildeles ved hjelp av scale_fill_manual()-metoden. Unødvendige rutenettlinjer og overleggskomponenter fjernes ved å bruke theme_minimal()-metoden. shinyApp(ui, server)-metoden bygger en app.

ggplot ( data = data. ramme ( Karakter = navn ( Karaktertelling ) , Telle = som. numerisk ( Karaktertelling ) ) ,
aes ( x = Karakter, og = Tell, fyll = Karakter ) ) +
geom_bar ( stat = 'identitet' ) +
laboratorier ( tittel = 'Karakterfordeling' ,
x = 'Karakter' ,
og = 'Telle' ) +
scale_fill_manual ( verdier = c ( 'EN' = 'grønn' , 'B' = 'lilla' , 'C' = 'rosa' ,
'D' = 'oransje' , 'F' = 'rød' ) ) +
theme_minimal ( )
}
} )
}
shinyApp ( ui, server )

Da vi kjørte denne koden, fikk vi et interaktivt grensesnitt der vi la til noen merker og klikket på 'La oss beregne karakterer'-knappen.

Tabellen som inneholder elevpoeng og karakterer vises, etterfulgt av søylediagrammet for karakterfordelingen i forskjellige farger.

Konklusjon

Denne veiledningen forklarer viktigheten av bruken av Shiny-pakken på R-språket via RStudio. For å supplere forklaringen vår, konstruerte vi en interaktiv nettapplikasjon for elevenes karaktersystem i R-koden ved å bruke 'Shiny'-pakken.