美文网首页
R语言学习之Shiny入门

R语言学习之Shiny入门

作者: R语言数据分析指南 | 来源:发表于2021-02-27 22:35 被阅读0次

Shiny是一个R程序包,它有助于使用R代码创建交互式Web应用程序,该代码可以在本地也可以在自己的服务器上托管。shiny可以从极其简单到极其复杂。在其众多用途中,Shiny是与他人进行数据互动的绝佳方法,本文通过一个示例先来简单介绍一下Shiny

安装Shiny软件包

install.packages("shiny")
library(shiny)

Shiny附带了一组内置示例,可以使用runExample( )函数来查看示例

runExample("01_hello")

本示例是一个带有滑块的直方图示例,用于控制箱的大小。该代码也显示在示例中

运行下方代码查看更多的示例

runExample("02_text")
runExample("03_reactivity")
runExample("04_mpg")
runExample("05_sliders")
runExample("06_tabsets")
runExample("07_widgets")
runExample("08_html")
runExample("09_upload")
runExample("11_timer")

在RStudio中转到File -> New File -> Shiny Web App选择一个文件Web应用程序,将看到如下代码

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(
   
   # Application title
   titlePanel("Old Faithful Geyser Data"),
   
   # Sidebar with a slider input for number of bins 
   sidebarLayout(
      sidebarPanel(
         sliderInput("bins",
                     "Number of bins:",
                     min = 1,
                     max = 50,
                     value = 30)
      ),
      
      # Show a plot of the generated distribution
      mainPanel(
         plotOutput("distPlot")
      )
   )
)

# Define server logic required to draw a histogram
server <- function(input, output) {
   
   output$distPlot <- renderPlot({
      # generate bins based on input$bins from ui.R
      x    <- faithful[, 2] 
      bins <- seq(min(x), max(x), length.out = input$bins + 1)
      
      # draw the histogram with the specified number of bins
      hist(x, breaks = bins, col = 'darkgray', border = 'white')
   })
}
# Run the application 
shinyApp(ui = ui, server = server)

Shiny将其应用程序的功能分为三个不同的部分:

第一部分
ui <- fluidPage()
第二部分
server <- function(input, output) {}
第三部分
shinyApp(ui = ui, server = server)

下面通过一个例子来展示

library(shiny)
library(shinyWidgets)
library(dslabs)
library(tidyverse)
library(plotly)


data("us_contagious_diseases")
disease <- us_contagious_diseases
disease <- mutate(disease, percapita = count/(population/100000)) %>% 
    pivot_longer(cols = c(count, percapita), 
                 names_to = "data", values_to = "value")

ui <- fluidPage(
    
    titlePanel("Diseases in the US 1928-2011"),
    sidebarLayout(
        sidebarPanel(
            # inputs
# selectizeInput()所有状态名称创建一个下拉菜单
            selectizeInput("stateInput", "State",
                           choices = unique(disease$state),  
                           selected="Virginia", multiple =FALSE), 
# checkboxGroupInput()来创建复选框
            checkboxGroupInput("diseaseInput", "Disease",
                               choices = c("Hepatitis A",
                                           "Measles",
                                           "Mumps", "Pertussis",
                                           "Polio", "Rubella", 
                                           "Smallpox"),
                               selected = c("Hepatitis A", "Polio")),
# sliderInput()创建可以滑动的刻度条
            sliderInput("yearInput", "Year", min=1928, max=2011, 
                        value=c(1928, 2011), sep=""),
            radioGroupButtons("dataInput", "Data",
                              choiceNames = list("Count", "Per capita"),
                              choiceValues = list("count", "percapita"))
        ),  
        
        mainPanel(
            plotOutput("diseaseplot"),
            br(), br(),
            verbatimTextOutput("stats"), 
            br(), br(),
            plotlyOutput("distplot")
        ) 
    )   
)   

server <- function(input, output) {
    
    d <- reactive({
        disease %>%
            filter(state == input$stateInput,
                   disease %in% input$diseaseInput,
                   year >= input$yearInput[1],
                   year <= input$yearInput[2],
                   data == input$dataInput)
    }) 
    
    
    output$diseaseplot <- renderPlot({
        
        ggplot(d(), aes(x=year, y = value, color=disease)) +
            geom_line() + 
            theme_bw() +
            xlab("Year") +
            ylab(input$dataInput) +
            ggtitle("Cases over time")
    })
    
    output$stats <- renderPrint({
        
        aggregate(value ~ disease, data = d(), sum)
        
    })
    
    output$distplot <- renderPlotly({
        
        box <- plot_ly(d(), y = ~value,
                       color = ~disease, type = "box")  %>%
            layout(title = "Distribution of cases over different years",
                   yaxis = list(title=input$dataInput))
        
    })
    
}

shinyApp(ui=ui, server=server)
  • renderPlot() 仅创建一个图,而其他类型的输出还有许多其他功能
  • renderDataTable() 创建一个交互式表
  • renderImage() 创建图像
  • renderText() 创建一个字符串

可以看到要完全掌握Shiny进行交互式数据分析还是有一定难度的,上面所列的11个示例数据希望对大家有所帮助

相关文章

  • R语言学习之Shiny入门

    Shiny是一个R程序包,它有助于使用R代码创建交互式Web应用程序,该代码可以在本地也可以在自己的服务器上托管。...

  • R语言:创建web界面

    1、shiny包 R语言使用shiny包创建web界面。使用shinydashboard包和shinytheme,...

  • IRscope代码拆解一

    IRScope 是用用来可视化 叶绿体基因组边界扩张收缩的一个shiny应用。正好自己最近在学习R语言里shiny...

  • 学习小组Day4笔记--行

    正式开始学习R语言了,今天笔记内容为R语言基础和ggplot2的入门学习 R语言基础 1、认识R与RStudio ...

  • R语言,在shiny中给文本加底色和注释笔记

    R语言,在shiny中给文本加底色和注释笔记

  • 小白学R—数据结构入门

    正在跟随微信公众号:猴子聊人物学习数据分析,选择了R语言作为入门工具,以后的文章算是记录自己学习R语言的历程吧!之...

  • R 语言--日期值的输入

    学习R语言,很多人都推荐使用图灵程序设计丛书中的"R in Action"-《R语言实战》作为R语言学习的入门书籍...

  • 「R shiny 基础」初识Shiny

    传送门 Shiny基础教程: 「R shiny 基础」初识Shiny 「R shiny 基础」如何进行网页布局 「...

  • 学习小组Day4笔记--扬马延

    R语言学习 1. R以及R studio安装 直接搜索R语言网页可直接安装 2. R语言入门 参考书目《R for...

  • R语言 shiny布局

    titlePanel :标题面板,创建包含应用程序标题的面板 用法:titlePanel(title, windo...

网友评论

      本文标题:R语言学习之Shiny入门

      本文链接:https://www.haomeiwen.com/subject/mynifltx.html