2013年1月11日 星期五

shiny package 網路應用

Updated: 2021.8.16

shiny相關套件約86個

1. 簡介

R從 2000年發展出第1個版本, 至今2013年1月已將近13年. 最新版本(2013年1月)為 2.15.2, 早期以統計應用為主, 目前如 RWEPA bolgger 首頁所提及已包括29大類別, 上自天文, 下至地理都可應用. 隨著資訊科技技術的進步, 未來將朝向WEB化的應用與客製化應用服務.

目前執行R軟體專案, 大部份會在個人電腦上執行, 如果希望將結果分享給其他人員, 一般會直接將R程式檔複製給他人. 相反地, 如果可以在WEB上直接應用(例如: 連結至某個網頁, 該網頁提供資料上傳與線上整合服務), 則 R的應用相信更可向上提昇. 目前已有部份套件已達到上述相似功能, 參考 R FAQ - 4. R Web Interfaces, 近期有個 shiny package 提供更方便, 互動式網路應用, 當使用者在網頁上更新資料時, 其結果"立刻"在WEB上呈現出來. shiny 其英文簡介如下: 

Easy web applications in R

Shiny makes it super simple for R users like you to turn analyses into interactive web applications that anyone can use. Let your users choose input parameters using friendly controls like sliders, drop-downs, and text fields. Easily incorporate any number of outputs like plots, tables, and summaries.
No HTML or JavaScript knowledge is necessary. If you have some experience with R, you're just minutes away from combining the statistical power of R with the simplicity of a web page. 

重點在於無需 HTML , JavaScript 等知識即可使用.

2. 使用步驟

1. 下載 shiny 套件, install.packages("shiny")
2. 下載 shiny 套件之後, "C:\Program Files\R\R-2.15.2\library\shiny\examples" 目錄包括 01_hello ... 10_download 等10個內建範例.
3. 載入 shiny 套件 library(shiny)
4. 執行範例 runExample("01_hello")
結果 http://localhost:8100/ , IE瀏覽器執行有問題, 直接將網址複製到 Google Chrome, 結果如下圖所示:


執行 shiny "01_hello" 範例R程式碼:

3. shiny  程式碼

shiny 執行時有二個檔案, 例如: 在"C:\Program Files\R\R-2.15.2\library\shiny\examples\01_hello" 資料夾中有二個檔案, 分別是 "server.R" , "ui.R".


程式說明:
server.R 定義伺服器端執行的執行功能, 經由 shinyServer 函數定義其功能, reactivePlot 執行互動式繪圖功能, 最後經由 hist 指令繪出直方圖, 結果顯示於右側.

ui.R 定義左側使用者輸入介面, sidebarPanel 函數可由使用者調整樣本大小. 其中 sliderInput("obs", "Number of observations:", min = 0, max = 1000, value = 500) 之意義如下:

(儲存樣本數的變數名稱, 標題名稱 , 最小值, 最大值, 預設值).

4. shiny  應用篇

看完上述說明相信大定家很想試一下其功能, 以下範例說明如何例用 curve 函數繪製曲線.
注意: 
1. 直接採用 curve(input$plot.function, input$xlimit.lower, input$xlimit.upper) 會有錯誤.
2. 正確須採用 do.call 函數
do.call("curve",list(expr=parse(text=input$plot.function),
                         from=input$xlimit.lower,
                         to=input$xlimit.upper)) 



執行結果




2 則留言:

  1. 第1張圖是採用ui.R程式中預設函數 x^3-6*x^2+9*x+10.
    第2張圖是在網頁上更新函數為 x^3-20*x^2+11*x+10, 再按下 [GO Plot!] 按鈕之更新後結果.

    回覆刪除
  2. 目前 shiny server 已經可以下載試用, 目前為beta免費版, 主要以 Linux Server 為主, 使用前須先安裝 Node.js, 參考網址:
    https://github.com/rstudio/shiny-server

    回覆刪除