只要有學過統計的人,對於R語言並不陌生。R語言,一種自由軟體程式語言與操作環境,主要用於統計分析、繪圖、資料探勘。R本來是由來自紐西蘭奧克蘭大學的羅斯·伊哈卡和羅伯特·傑特曼開發(也因此稱為R),現在由「R開發核心團隊」負責開發。R基於S語言的一個GNU計劃專案,所以也可以當作S語言的一種實現,通常用S語言編寫的代碼都可以不作修改的在R環境下執行。[維基百科]
Shiny Server是一個快速可將 R 統計結果,呈現在網頁上的伺服主機程式。Shiny是 Rstudio 這家公司開發的產品,自2012年推出後,廣受大家好評與喜愛,讓不懂網頁程式的 R語言使用者,可以輕鬆的部署互動式的統計資料在網頁上。
[R語言安裝程序]
編輯套件更新的來源 URL,編輯 /etc/apt/sources.list$ sudo nano /etc/apt/sources.list
將以下這行加到 sources.list 最後一行:
deb http://archive.raspbian.org/raspbian/ stretch main
執行更新及安裝 R語言
$ sudo apt-get update $ sudo apt-get install r-base r-base-core r-base-dev
到這裡,R語言已經安裝完成,可輸入 R 啟動程式,q() 退出程式。
$ R
[安裝 Shiny-Server]
安裝 Shiny 前需要先安裝以下套件:• python 2.6 or 2.7 (3.x 目前尚不支援)
• cmake (需 2.8.10之後版本),如要安裝 cmake 套件的話,可執行以下指令進行安裝:
$ sudo apt-get install cmake
• gcc (需 4.8或更新版本)
• g++ ( 需 4.8或更新版本)
• git
• R-base-devel (請參考前面安裝方法)
(1) 安裝 R 的 Shiny套件
$ sudo su - -c "R -e \"install.packages('shiny', repos='http://cran.rstudio.com/')\""
(2) 從 GitHub 下載程式
$ git clone https://github.com/rstudio/shiny-server.git
(3) 建立一個暫存的目錄 Get into a temporary directory in which we'll build the project
$ cd shiny-server $ mkdir tmp $ cd tmp
(4) 增加 bin 目錄到路徑中
$ DIR=`pwd` $ PATH=$DIR/../bin:$PATH
(5) 用以下指令檢查 Python 版本是否為 2.6.x 或 2.7.x
$ PYTHON=`which python` $ $PYTHON --version
(6) 使用 cmake 作為 make 的前置設定,如果要將程式安裝在不同路徑下,可修改"--DCMAKE_INSTALL_PREFIX" 參數
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DPYTHON="$PYTHON" ../
(7) 假使這裡有錯誤,檢查一下 python 版本是否正確?編譯時間會花比較多時間,大約要將近一個多小時,要稍微耐心等候。
$ make $ mkdir ../build $ (cd .. && ./bin/npm --python="$PYTHON" install) $ (cd .. && ./bin/node ./ext/node/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js --python="$PYTHON" rebuild)
(8) 安裝軟體到預設位置
$ sudo make install
(9) 建立 shiny-server 執行檔捷徑,放置於 /usr/bin
$ sudo ln -s /usr/local/shiny-server/bin/shiny-server /usr/bin/shiny-server
(10)建立 shiny 使用者
$ sudo useradd -r -m shiny
(11) 建立日誌、設定及應用程式目錄
$ sudo mkdir -p /var/log/shiny-server $ sudo mkdir -p /srv/shiny-server $ sudo mkdir -p /var/lib/shiny-server $ sudo chown shiny /var/log/shiny-server $ sudo mkdir -p /etc/shiny-server
(12) 下載預設的設定檔
Shiny Server 安裝完成後,是沒有設定檔的,設定檔名為 shiny-server.conf,存放在 /etc/shiny-server/ 目錄下,假使沒有這個檔案,就會使用預設值當作設定。可以到以下網站下載預設的設定檔:
$ cd /etc/shiny-server/ $ sudo wget http://withr.me/misc/shiny-server.conf
(13) 執行程式
$ sudo shiny-server
(14) 使用瀏覽器進行連線,我的 Pi IP為192.168.1.103,連線方式要帶 Port 號:3838
http://192.168.1.103:3838
(15) 建立 server.R 及 ui.R 程式
瀏覽器看到的是空白對嗎?主要是因為安裝完成後,Shiny Server沒有網頁程式可呈現,需自行將放置在 /srv/shiny-server 目錄內,先建立一個目錄,再將 server.R 及 ui.R兩程式放在目錄內。
• 方法一:自行建立 server.R 及 ui.R,以 hello為範例
$ cd /srv/shiny-server $ mkdir hello_shiny $ cd hello_shiny
分別建立 server.R 及 ui.R,我參考官方教學說明,列出程式範例:
server.R
library(shiny) # Define server logic required to draw a histogram shinyServer(function(input, output) { # Expression that generates a histogram. The expression is # wrapped in a call to renderPlot to indicate that: # # 1) It is "reactive" and therefore should re-execute automatically # when inputs change # 2) Its output type is a plot output$distPlot &le- renderPlot({ x &le- faithful[, 2] # Old Faithful Geyser data bins &le- seq(min(x), max(x), length.out = input$bins + 1) # draw the histogram with the specified number of bins hist(x, breaks = bins, col = 'darkgray', border = 'white') }) })
ui.R
library(shiny) # Define UI for application that draws a histogram shinyUI(fluidPage( # Application title titlePanel("Hello Shiny!"), # Sidebar with a slider input for the number of bins sidebarLayout( sidebarPanel( sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30) ), # Show a plot of the generated distribution mainPanel( plotOutput("distPlot") ) ) ))
• 方法二:下載網路上的程式
網友 Huidong Tian 在以下網站放了 server & ui 的程式,可供下載:
$ cd /srv/shiny-server $ mkdir kmeans; cd kmeans $ wget http://withr.me/misc/kmeans/ui.R $ wget http://withr.me/misc/kmeans/server.R
這裡有一些範例可下載參考: rstudio/shiny-examples
使用 Shiny,官方有相關教學說明:https://shiny.rstudio.com/tutorial/
[問題]
第一次安裝完成時,執行 shiny-server,透過Web連線時會出現以下錯誤訊息:
Error: An error has occured. Check your logs or contact the app author for clarification.
發現是寫log 檔案的問題,修正方式是要在 shiny-server.config 設定檔中,加入開啟 Log保留的設定:
$ cd /etc/shiny-server $ sudo nano shiny-server.conf
在檔案內加入以下一行,網頁就可以正常執行,如下圖:
[參考資料]
• Huidong Tian:Install Shiny Server on Raspberry Pi
• RStudio:shiny gallery
• https://github.com/rstudio/shiny-server/wiki/Building-Shiny-Server-from-Source
張貼留言