R语言shiny包的学习
shiny是一個R語言中的網絡應用程序框架,可以將你的數據分析變成交互式的網絡應用(web apps),簡單又實用。
基本用法
一個shiny應用可以分為兩部分:前端和后端,其實所有的shiny應用都是基于以下的模版:
ui = fluidPage()
server = function(input, output) {}
shinyApp(ui = ui, server =server )
其中,fluidPage中主要有兩部分:輸入函數,和輸出函數
輸入函數
輸入函數基本上都是以 *input的形式,主要有以下
按鈕 actionButton()、submitButton()
單個選框 checkboxInput()
一組選框 checkboxGroupInput()
日期輸入 dateInput()
日期范圍 dateRangeInput()
文件上傳 fileInput()
數字輸入 numericInput()
密碼輸入 passwordInput()
單選框 radioButtons()
下拉選擇框 selectInput()
滾動條 sliderInput()
文字輸入 textInput()
輸出函數,有以下幾種:
一個可交互表 datatableOutput()
原始的HTML htmlOutput()
圖片 imageOutput()
畫圖 plotOutput(),plotOutput("hist")
表 tableOutput()
文字 textOutput()
Shiny UI元素 uiOutput()
文字 verbatimTextOutput()
而將輸入轉化為輸出的函數,便是server()函數了,寫server()函數有3步:
用output$**來存儲要輸出的對象,例如output$hist, 其中hist就是plotOutput中所命名的
用render*()來創建要輸出的對象,其中render*()函數有以下各種:renderDataTable(),renderImage(),renderPlot(),renderPrint(),renderTable(),renderText(),renderUI()
用input$* 來連接調用input中的參數
shiny的基本用法就是這樣了,下面是個完整的小案例:
library(shiny)
ui <- fluidPage(
sliderInput(inputId = "num",
label = "Choose a number",
value = 25, min = 1, max = 100),
plotOutput("hist")
)
server <- function(input, output) {
output$hist <- renderPlot({
hist(rnorm(input$num))
})
}
shinyApp(ui = ui, server = server)
更多的shiny應用案例見https://github.com/rstudio/shiny-examples
另外,響應表達式的兩種方法(例如用于生成一組隨機數,在不同的地方調用,保證是調用的同一組數):
像調用函數一樣調用響應表達式,例如:
反應式表達式緩存它們的值(表達式將返回其最近的值,除非它已經失效)
此外,還有一些其他可能會用到的函數:
將結果作為非反應性值返回:isolate({}),例如hist(rnorm(input$num),main = isolate({input$title}))
observeEvent()監聽事件 observeEvent(input$clicks, { print(input$clicks)}), 更多button使用方法見此(點擊)
observe()觸發代碼在服務器上運行,使用語法與render*(), reactive(), and isolate()相同
eventReactive()延遲按鈕事件等,用法與reactive()相同
reactiveValues()創建一個響應值的列表來進行編程操作,例如
嵌入HTML
嵌入HTML的兩種方法:
用tags$*,支持很多,如a(),br(),code(),em(),h*(),hr(),img(),p(),strong()等
直接用HTML(" "),引號里面即為HTML的原始代碼
布局
布局的兩個主要函數:
fluidRow()創建一行,每一個新行置于上一行的下面
column()在一行中添加列,每一個列從左邊起,總共有12列,可用width指定需要幾列的寬度,用offset指定從左邊的偏移列數
面板布局,有以下多種:
absolutePanel(),絕對布局
conditionalPanel(),一個JS表達式決定是否顯示
fixedPanel(),面板固定到瀏覽器窗口,不滾動頁面
headerPanel(),標題面板,同pageWithSidebar()一起用
inputPanel(),灰色背景,適用于一組輸入
mainPanel(),顯示輸出的面板,可同pageWithSidebar()一起用
navlistPanel(),用于顯示多個堆疊的tabPanels()面板,使用側邊欄導航
sidebarPanel(),用于顯示輸入的側欄面板,可同pageWithSidebar()一起使用
tabPanel(),堆疊面板,同navlistPanel(),tabsetPanel()一起使用
tabsetPanel(),用于顯示多個堆疊的tabPanels()面板,使用側邊欄導航
titlePanel(),標題面板,同pageWithSidebar()一起用
wellPanel(),灰色背景的面板
還有一些預定義好的一些布局:
sidebarLayout( sidebarPanel(), mainPanel() ),左邊標題欄,右邊是主體
ui = fixedPage( fixedRow( column(5,#etc.) ) ),固定頁面,默認寬度是1170px
navbarPage() 把不同的tab面板堆疊,面板欄在上部,需要title參數。內部可結合tabPanel()使用
navbarMenu(),不同的tab的下拉菜單,可用在navbarPage內部
dashboardPage(),來自shinydashboard包,內部同dashboardHeader()(上方標題),dashboardSidebar()(左方側欄),dashboardBody()(中間主體),更多見此
樣式
shiny所用的是Bootstrap 3 CSS框架。
嵌入css樣式有3中方法:
鏈接到外部的css文件
在你的App文件夾下創建www文件夾,并將css文件放置其中
然后用fluidPage()的theme屬性設置為css文件的名字,或者用tags$head進行設置,如下tags$head( tags$link( rel = "stylesheet", type = "text/css", href = "file.css" ) )
在header中寫全局css樣式,例如tags$head( tags$style(HTML(" p { color:red; } ")) ),或者直接用includeCSS("file.css")
在tag的style屬性中添加個體的css樣式,例如tags$h1("Title", style = "color:red;")
shiny的中文教程見此,其中有關于從客戶端獲取數據的內容。
此外,使用時shiny時經常要使用DT包展示數據表格,其常用鏈接:DT包介紹,DT的API,DT常用設置
總結
以上是生活随笔為你收集整理的R语言shiny包的学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓日历同步的一些要点
- 下一篇: java 三维数组长方体求体积_已知任意