基於R語言的shiny網頁工具開發基礎系列-03

2021-03-02 生信技能樹
l3-更複雜的頁面部件

shiny 小部件提供了一個用戶給app傳送信息的方式

為什麼加上控制小工具

上節已經學會在用戶界面放置一些簡單的元素,但顯示更複雜的內容需要用到小部件widgets

widgets 是可交互網頁元素,讓用戶用它們控制app

Shiny 小部件widgets 從用戶手裡收集值,當用戶改變小工具的時候,值也會變

控制小部件

如圖有各種小部件,shiny有一系列的小部件,每個都可以用直白命名的R函數創建,例如函數actionButton 用來創建 動作按鈕 (Action Button),函數 sliderInput 創建 一個 滑塊 (slider bar)

下表是常見的小部件



其中的一些部件是用Twitter Bootstrap項目構建的,一個受歡迎的構建用戶界面的開源框架

加上小部件

你可以像添加其他元素一樣添加widgets

放置一個widget 函數 在ui對象的sidebarPanel 或 mainPanel 函數中

每個widget 函數都要幾個參數,每個widget的前兩個參數一定是:

widget的名字name:用戶不會看到這個名字,但是可以用它獲取widget的值,應該用字符串一個label:這個標籤將和app中的小部件一起出現,應該是字符串,但是也可以是空的""

此例中,name參數是"action", 標籤是 "Action"

actionButton("action", label = "Action")

其他參數因小部件而異,具體要看小部件執行的工作所需的內容

他們包括初始值,範圍和增量

也可以通過查看函數的幫助頁面來獲取其他參數,如?selectInput

試試把下面的代碼運行一下吧

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)

結果如下

可以每個都感受一下是做什麼的,或者改改代碼的值,看看有什麼變化

此app的布局方案可以參考application layout guide. 當然此篇只要了解他們的作用就行了,不必了解這種複雜的布局方案


練習

嘗試寫個如圖所示的界面(答案很長放在後面,但是一定一定要先自己做一遍哦)



小節回顧每個小工具的函數都需要name和label這兩個參數更進一步

Shiny Widgets Gallery 提供模版,供你快速加入到自己的app中

訪問這個網站,圖庫中展示了每個小部件,並演示了每個小部件的值根據你的輸入而變化


選擇一個小工具,並點擊See Code。圖庫會跳轉到一個描述這個小工具的示例app,只需要複製其中代碼到自己的app中即可。


我又做出來了哦,這是我的結果



我的代碼

library(shiny)

# Define UI ----
ui <- fluidPage(
  titlePanel("censusVis"),
  sidebarLayout(
    sidebarPanel(
      p("Create demographic maps with information from the 2010 US Census."),
      br(),
      selectInput("select", h3("Choose a variable to display"),
                  choices = list("Percent White" = 1, "Percent Black" = 2,
                                 "Percent Hispanic" = 3, "Percent Asian" = 4), selected = 1),
      sliderInput("slider", h3("Range of interest:"),
                  min = 0, max = 100, value = c(0,100))
    ),
    mainPanel("")
  )
)

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

}

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

參考答案

library(shiny)

# Define UI ----
ui <- fluidPage(
  titlePanel("My Shiny App"),
  sidebarLayout(
    sidebarPanel(
      h2("Installation"),
      p("Shiny is available on CRAN, so you can install it in the usual way from your R console:"),
      code('install.packages("shiny")'),
      br(),
      br(),
      br(),
      br(),
      img(src = "rstudio.png", height = 70, width = 200),
      br(),
      "Shiny is a product of ", 
      span("RStudio", style = "color:blue")
    ),
    mainPanel(
      h1("Introducing Shiny"),
      p("Shiny is a new package from RStudio that makes it ", 
        em("incredibly easy "), 
        "to build interactive web applications with R."),
      br(),
      p("For an introduction and live examples, visit the ",
        a("Shiny homepage.", 
          href = "http://shiny.rstudio.com")),
      br(),
      h2("Features"),
      p("- Build useful web applications with only a few lines of code—no JavaScript required."),
      p("- Shiny applications are automatically 'live' in the same way that ", 
        strong("spreadsheets"),
        " are live. Outputs change instantly as users modify inputs, without requiring a reload of the browser.")
    )
  )
)

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

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

Reference:

Shiny - Add control widgets

相關焦點

  • 基於R語言的shiny網頁工具開發基礎系列-05
    也會這樣調用這些函數,但是寫法略有不同source和readRDS需要文件路徑,文件路徑的使用方式在shiny中是不一樣的當shiny運行server中的函數時,會把所有文件路徑的起始位置視為server.R所在的路徑,換而言之,shiny app會把server.R所在的路徑作為工作目錄
  • 「R shiny 基礎」初識Shiny
    簡介shiny一個能夠方便構建交互式網頁應用的R包,在這一部分我們將會開始學習如何搭建一個Shiny應用。如果你還沒有安裝Shiny的話,那麼你需要打開R語言(顯然,你需要聯網)install.packages("shiny")案例Shiny 提供了7個內置案例方便你熟悉shiny的不同屬性,了解shiny如何工作。
  • 【R包介紹】shiny包
    對於R和web的交互,Shiny包的特點在於不需要了解網頁語言,可以用純R代碼來搭建。生成的網頁應用是動態交互,還可以進行即時更新。Shiny還提供了現成組件方便快速在網頁上展示數據、圖表和模型。本文將通過實例來講解shiny,幫助大家怎樣通過這個包構造自己的web應用。
  • shiny 上手
    老實講,R 語言在交互繪圖和互動設計上,並沒有完善的界面支持,這也是 R 語言沒法和 matlab 在界面操作上相比較的一個重要原因。與 ui 對應的 server 對象則是真真切切的 R 語言基礎函數所表示的代碼。但這樣的代碼需要包裹在 render* 系列函數中,並賦值給變量 output 的子類,這樣的子類,就對應 ui 中的 outputId 的值。最後一部分,則是 shinyApp(ui = ui, server = server),因此最後一步必須要執行 shinyApp() 函數。
  • 不容錯過的5款實用網頁開發和設計工具
    此外,隨著需求及項目的進一步細化,開發者社區幾乎每天都會出現新的庫和開發工具,作為網頁開發者或設計師的你,自然很有必要去了解和掌握當下最新的、實用的工具,持續優化工作方法、有效提高開發進度。以下小編收集了一系列優秀的開發和設計工具,包括在線/離線搭站工具、開原始碼工具、在線代碼生成器、排版工具等,一起看看吧。1.
  • Python 還是R 語言?
    什麼是R語言?R語言,一種自由軟體程式語言與操作環境,主要用於統計分析、繪圖、數據挖掘。R本來是由來自紐西蘭奧克蘭大學的羅斯·伊哈卡和羅伯特·傑特曼開發(也因此稱為R),現在由「R開發核心團隊」負責開發。
  • R語言學習資源匯總(分學科)
    ,更像是一門專為統計學家量身定製的程式語言,且由於歷史悠久、開源等特點,不少學術界人士會選擇自行開發一個R包作為其學術產出。首先我們將R的用戶分為以下三種:https://mirrors.tuna.tsinghua.edu.cn/CRAN/https://rstudio.com/products/rstudio/download/#download之後首推R的數據處理與作圖工具dplyr和ggplot2,這兩者都在Rstudio首席科學家Hadley Wickham開發數據科學框架tidyverse
  • R : Shiny|搭建單細胞數據分析雲平臺
    前言shiny官網(https://shiny.rstudio.com/)在R for data science這本書中,作者提出數據分析的一個流程,在數據轉換、可視化以及建模之後,來到數據分析的新階段:與別人分享我們的數據。
  • C Sharp 基礎知識系列- 16 開發工具篇
    前言這是C# 基礎知識系列的最後一個內容講解篇,下一篇是基礎知識-實戰篇。這一篇主要講解一下C#程序的結構和主要編程工具。1. 工具工欲善其事必先利其器,在實際動手之前我們先來看看想要編寫一套C#程序需要做哪些準備吧。
  • R語言包,掌握這10個就夠了!(含資源下載)
    一、數據可視化ggplot2ggplot2是最常用、最受用戶們喜愛的作圖工具包了,被譽為數據作圖的標杆。它做出的圖不僅漂亮,而且可以涵蓋很多複雜的信息。網上也有大量關於它的教程,學習資源很豐富。它還有個很活躍的用戶社區,可獲得及時反饋,每年更新2次,還有豐富的學習資源,比如http://www.bioconductor.org/help/course-materials/這裡的一系列教程。
  • 「了不起的R語言」第一課:R與Rstudio的安裝
    是時候為你打開新世界的大門,讓你多了解些了不起的R語言吧!那麼R語言哪裡好?免費,免費,大寫的免費!正版!開源!上手快!特好使!工欲善其事必先利其器,我們今天就來給大夥介紹R語言以及Rstudio如何安裝。一、R的安裝R 的安裝可通過網址https://cran.rstudio.com/選擇適合自己平臺的安裝包進行下載.
  • R+ECharts2Shiny實現web動態交互式可視化數據(上)
    作者:糖甜甜甜,R語言中文社區專欄作者公眾號:經管人學數據分析
  • R語言爬蟲系列6|動態數據抓取範例
    R雖然是以一門統計分析工具出現在大多數人印象中的,但其畢竟本質上是一門程式語言,對於爬蟲的支持雖不如Python那樣多快好省,但悉心研究一下總能做出一些讓你驚喜的效果。 大約很早之前,小編就寫過關於R語言爬蟲新貴rvest的抓取介紹,之前說rvest+SelectGadgetor是結構化網頁抓取的實戰利器,大家的溢美之詞不斷。
  • 【R語言學習】R語言概述與軟體下載安裝
    但是R軟體的使用需要編程基礎,因此R語言的學習就顯得尤為重要。科研創新服務平臺擬結合R軟體開展一系列R語言學習教程,旨在幫助科研人員儘快了解R語言在生物醫學領域中的應用,敬請期待!R語言是用於統計分析,圖形表示報告的程式語言和軟體環境。
  • R語言 | 第一講:下載和安裝
    如今在這個網絡高速發達的資訊時代,搜尋引擎和網站每天都在採集大量的信息,即非原創.採集信息用的程序一般被稱為網絡爬蟲(Web Crawler),網絡蜘蛛(Web spider),其行為先是」爬」到對應的網頁上
  • 網易雲課堂排名第一的R語言課程,要不要學?
    相信很多人開始學習一個新的工具的時候,會去買對應的工具書,但是R語言學習過程中使用到的一些經典的工具書,它們有一個明顯的缺點:一個詞概括,過時。還有一個重要的原因是,近幾年隨著大數據,數據分析等技術在企業中的落地,催生了對數據分析工具的進化需求,R語言在最近幾年裡,變化很大,在這種變化中,由於外部環境的影響,又形成了一個相對比較優秀的R語言數據分析生態系統。
  • 用shiny和echarts4r製作一個COVID-19的dashboard
    需要注意的是由於項目開發是本人利用工作之餘時間趕製而成,我本人也不是R語言老手和shiny應用開發老手,代碼質量和項目結構可能極其恐怖(能用就行),各位吐槽時希望能嘴下留情。如果大家能幫忙提出改進的PR當然是最好的了!另外文筆不好請大家多多包涵。文章對廢話進行了標註,各位跳著看即可。
  • 18款適用於開發人員的網頁代碼編輯器
    Kodingen是一種在線開發環境,在線代碼編輯器,基於網頁的代碼編輯器。5.EcoderEcoder是基於網頁的代碼編輯器,它包含了一個文件瀏覽器、文件上傳器、tabbed系統,支持同時編輯多個文件。這個web應用程式方便開發人員直接在線編輯代碼,支持實時的語法高亮。6.
  • 9個最好用的JavaScript開發工具和代碼編輯器
    工欲善其事,必先利其器,如果你想在這個領域出類拔萃,那麼你就必須具備一些優秀的技能,例如能操作不同的平臺、IDE和其他各種各樣的工具。談到平臺和IDE,現在已經不是以前那個掌握一個IDE就能「一招鮮吃遍天」的時代了。激烈的競爭以及蔓延到現在的集成開發環境。