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