Raspberry Pi 筆記(45):安裝R語言及互動介面的 Shiny Server


只要有學過統計的人,對於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

在檔案內加入以下一行,網頁就可以正常執行,如下圖:
preserve_logs true;



[參考資料]
• Huidong Tian:Install Shiny Server on Raspberry Pi
• RStudio:shiny gallery
• https://github.com/rstudio/shiny-server/wiki/Building-Shiny-Server-from-Source

Post a Comment

較新的 較舊