Shiny

1 Basic

一个Shiny App在一个app.R里面,然后这个script在一个路径下(例:newdir/),运行这个app使用runApp("newdir/")。参数有display.mode = "showcase"

Shiny App由三部分组成,ui、server和shinyApp:

library(shiny)

# Define UI ----
ui <- fluidPage(
  
)

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

# Run the app ----
shinyApp(ui = ui, server = server)

2 User Interface

2.1 Lay Out

使用fluidPage函数可以创造一个适应于窗口大小的界面:

ui <- fluidPage(

)

界面可以包含一个主面板和一个侧面板:

ui <- fluidPage(

  titlePanel("主面板标题"),

  sidebarLayout(
  	positon = "right",     # 默认"left"
    sidebarPanel("侧面板"),
    mainPanel("主面板")
  )
  
)

高级的还有(待补):

navbarPage :有导航栏的多页交互界面
fuidRowcolumn:网格页面

2.2 HTML Content

对应函数可以使用HTML语法:

R codeHTML code
p("一段话")<p>text</p>
h1("一级标题")<h1>text</h1>h2, h3, ..., h6
a("超链接")<a>text</a>
br()<br/> 空行
div()<div/> 分割线
span(, style = "blabla: blabla; blabla:blabla")<span>blabla</span style = "blabla: blabla">
pre()<pre> 以固定宽度的字体按原样显示文本
code<code> 代码
img(src = "", height = )<img> 图片
strong()<strong> 粗体
em()<em> 斜体

3 Add control widgets

3.1 Control widgets

R codeOutcome
actionButton()Action Button
checkboxGroupInput()A group of check boxes
checkboxInput()A single check box
dateInput()A calendar to aid date selection
dateRangeInput()A pair of calendars for selecting a date range
fileInput()A file upload control wizard
helpText()Help text that can be added to an input form
numericInput()A field to enter numbers
radioButtons()A set of radio buttons
selectInput()A box with choices to select from
sliderInput()A slider bar
submitButton()A submit button
textInput()A field to enter text

widgets

3.2 Adding widgets

Widgets要加在面板函数里面,参数有name = "名字"label = "标签"

library(shiny)

# Define UI ----
ui <- fluidPage(
  titlePanel("Basic widgets"),
  
  fluidRow(
    
    column(3,
           h3("Buttons"),
           actionButton("action", "Action"),
           br(),
           br(), 
           submitButton("Submit")),
    
    column(3,
           h3("Single checkbox"),
           checkboxInput("checkbox", "Choice A", value = TRUE)),
    
    column(3, 
           checkboxGroupInput("checkGroup", 
                              h3("Checkbox group"), 
                              choices = list("Choice 1" = 1, 
                                             "Choice 2" = 2, 
                                             "Choice 3" = 3),
                              selected = 1)),
    
    column(3, 
           dateInput("date", 
                     h3("Date input"), 
                     value = "2014-01-01"))   
  ),
  
  fluidRow(
    
    column(3,
           dateRangeInput("dates", h3("Date range"))),
    
    column(3,
           fileInput("file", h3("File input"))),
    
    column(3, 
           h3("Help text"),
           helpText("Note: help text isn't a true widget,", 
                    "but it provides an easy way to add text to",
                    "accompany other widgets.")),
    
    column(3, 
           numericInput("num", 
                        h3("Numeric input"), 
                        value = 1))   
  ),
  
  fluidRow(
    
    column(3,
           radioButtons("radio", h3("Radio buttons"),
                        choices = list("Choice 1" = 1, "Choice 2" = 2,
                                       "Choice 3" = 3),selected = 1)),
    
    column(3,
           selectInput("select", h3("Select box"), 
                       choices = list("Choice 1" = 1, "Choice 2" = 2,
                                      "Choice 3" = 3), selected = 1)),
    
    column(3, 
           sliderInput("slider1", h3("Sliders"),
                       min = 0, max = 100, value = 50),
           sliderInput("slider2", "",
                       min = 0, max = 100, value = c(25, 75))
    ),
    
    column(3, 
           textInput("text", h3("Text input"), 
                     value = "Enter text..."))   
  )
  
)

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

# Run the app ----
shinyApp(ui = ui, server = server)

4 Display Reactive Output

4.1 Output in “ui” Part

Output也要加在面板函数里面

Output functionCreates
dataTableOutput("OutputName")DataTable
htmlOutput()raw HTML
imageOutput()image
plotOutput()plot
tableOutput()table
textOutput()text
uiOutput()raw HTML
verbatimTextOutput()text

4.2 Create Output in “server” Part

output$OutputName就是ui里面的*Output("OutputName")。使用render*()来得到这些output。

input$WidgetName就是ui里面对应widget中输入变量。

render functioncreates
renderDataTable()DataTable
renderImage()images (saved as a link to a source file)
renderPlot()plots
renderPrint()any printed output
renderTable()data frame, matrix, other table like structures
renderText()character strings
renderUI()a Shiny tag object or HTML
server <- function(input, output) {
  
  output$OutputName <- render*({ 
    somefunction(input$WidgetName)
  })
  
}

5 Use R Script and Data

在app文件夹里可以放helper.R然后使用source("helper.R")引用。在app文件夹下新建一个data文件夹,然后使用read*()引用。

6 Reactive Expression

reactive({ })使数据需要更新时才更新,即在*render()函数里的数据过时或*render()函数里input值有变化时。在reactive*render函数中调用reactive expression。

7 Share Your Apps

可以分享为r script(访问者需要安装R)或者一个web。

7.1 R Script

除了runApp()之外,还可以使用runUrl()runGitHub()runGist()

# install.packages("shiny")
library(shiny)
runApp("someapp")

打包zip上传到一个link可以使用runGitHub()

library(shiny)
runUrl( "<the weblink>")

上传Github可以使用:

runGitHub( "<your repository name>", "<your user name>")

匿名上传Github(<gist.github.com>):

runGist("<gist number>")

7.2 Web

shinyapps.io,Shiny Server,RStudio Connect

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值