顯示具有 shiny 標籤的文章。 顯示所有文章
顯示具有 shiny 標籤的文章。 顯示所有文章

2023年3月30日 星期四

RWEPA | shiny企業實務應用 第6集-小明算命師(下 ) 【附小明算命師實作成果、投影片與中文字幕】

第6集-小明算命師(下 ) - 第1季完結篇


提供簡單易懂 R shiny 套件教學, 建立互動式網頁服務與企業級儀表板.

本集包括以下特色:

  1. 機器學習預測, 使用 caret 套件
  2. 網頁檔案下載技巧 (Generating downloadable reports from shiny)
  3. WORD檔案下載技巧 (Generating downloadable reports from shiny)


謝謝各位大大點閱,歡迎分享、按訂閱、讚、開啟小鈴鐺。】






主題: 

6.1 shiny小明算命師-六大特性

    🔎整合敘述統計資料分析

    🔎整合推論統計資料分析

    🔎整合機器學習進行人力資源預測

    🔎下載客製化HTML檔案

    🔎下載客製化WORD檔案

    🔎輕鬆更換為企業人力資源料集

6.2 下載檔案與shiny架構

6.3 ui設定

6.4 server設定

6.5 Rmd設定

6.6 結論





# RWEPA | R - shiny企業實務應用 第1集-白話shiny

# RWEPA | shiny企業實務應用 第2集-下拉式選單【附習題、投影片與中文字幕】

# RWEPA | shiny企業實務應用 第3集-佈置【附54萬筆銷售資料習題、投影片與中文字幕】

# RWEPA | 第4集-shiny銷售儀表板【附小明算命師習題、投影片與中文字幕】

# RWEPA | 第5集- shiny小明算命師(上)【附小明算命師實作習題、投影片與中文字幕】

# RWEPA | shiny企業實務應用 第6集-小明算命師(下 ) 中文字幕,包括網頁與WORD檔案下載技巧 (Generating downloadable reports from shiny)

#shiny教學
#shinydashboard
#dplyr
#ggplot2

# end

2023年2月24日 星期五

RWEPA | shiny企業實務應用 第5集-小明算命師(上)【附小明算命師實作習題、投影片與中文字幕】

提供簡單易懂 R shiny 套件教學, 建立互動式網頁服務與企業級儀表板.



【記得按 訂閱、讚、開啟小鈴鐺】
















主題: 

5.1 套件總覽

5.2 Excel檔案匯入

5.3 資料轉換與視覺化

5.4 建立預測模型

5.5 習題-R與小明算命師-shiny實作篇

5.6 結論




# end

2023年2月12日 星期日

RWEPA | shiny企業實務應用 第4集-shiny銷售儀表板【附小明算命師習題、投影片與中文字幕】

提供簡單易懂 R shiny 套件教學, 建立互動式網頁服務與企業級儀表板.



【記得按 訂閱、讚、開啟小鈴鐺】






主題: 

4.1 範例_runExample(“04_mpg”)

4.2 範例_runExample(“05_sliders”)

4.3 銷售儀表板-手繪版

4.4 銷售儀表板-完成版

4.5 習題-R與小明算命師

4.6 結論






# end

2023年2月6日 星期一

RWEPA | shiny企業實務應用 第3集-shiny佈置【附54萬筆銷售資料習題、投影片與中文字幕】

 提供簡單易懂 R shiny 套件教學, 建立互動式網頁服務與企業級儀表板.



【記得按 訂閱、讚、開啟小鈴鐺】




主題: 

3.1 佈置函數總覽

3.2 tabsetPanel(分頁面版)

3.3 shiny儀表板標準流程

3.4 第2章習題解答

3.5 習題

3.6 結論




# end

2023年1月30日 星期一

RWEPA | shiny企業實務應用 第2集-下拉式選單【附習題、投影片與中文字幕】

提供簡單易懂 R shiny 套件教學, 建立互動式網頁服務與企業級儀表板.


【記得按 訂閱、讚、開啟小鈴鐺】













主題: 

2.1 shiny函數總覽
2.2 下拉式選單範例(“02_text”)
2.3 文字方塊範例(“03_reactivity”)
2.4 習題
2.5 結論




# end

2023年1月24日 星期二

RWEPA | shiny企業實務應用 第1集-白話shiny

提供簡單易懂 R shiny 套件教學, 建立互動式網頁服務與企業級儀表板.


2023年鴻兔大展 福兔迎祥


【記得按 訂閱、讚、開啟小鈴鐺】














主題: 
1.shiny能幫助企業(或自己)做什麼? 
2.shiny簡介 
3.第一個shiny範例(“01_hello”) 
4.結論





# end

2023年1月11日 星期三

Python - streamlit dashboard

在 Python 環境中, Streamlit 模組提供資料分析的網頁服務框架,內建常用的網頁操作控制項,配合 pnadas 資料分析模組,matplotlib 等視覺化模組,可以快速建立互動式網頁服務與企業級儀表板,其功能與 R 語言的 shiny 套件相似。





YouTube: https://youtu.be/FW-dl-flLvk

【記得按 讚、訂閱、開啟小鈴鐺】


Community Cloud(包括免費版本): https://streamlit.io/cloud

模組: Python - streamlit

LINK: https://rwepa.blogspot.com/2023/01/python-streamlit-dashboard.html

Code: https://github.com/rwepa/teaching-streamlit

# end

2022年10月22日 星期六

shiny for Python (Python 使用 shiny 模組教學)

Python 程式使用 shiny 模組執行結果:











R語言的 shiny 套件可以建立跨平台的互動式網頁,今年(2022)RStudio 研討會宣佈 shiny for Python, 表示在 Python 環境亦可執行 shiny 建立互動式網頁。

PyPI shiny: https://pypi.org/project/shiny/


Youtube 說明:








https://youtu.be/s2fgEAa6lq0

【謝謝各位大大幫忙按 訂閱、開啟小鈴鐺


PDF講義大綱:

  1. RWEPA 簡介
  2. 資料分析架構 --> APC方法
  3. 資料分析與視覺化應用
  4. shiny 簡介
  5. shiny for Python 實作篇1 - my_app
  6. shiny for Python 實作篇2 – 01_hello
  7. 結論

https://github.com/rwepa/shiny_python/blob/main/shiny_python_tutorial.pdf


Python 程式:

https://github.com/rwepa/shiny_python/blob/main/pyshiny_01_hello.py


檔案架構:

  • shiny 一般以資料夾方式儲存, 本例為 pyshiny_01_hello 資料夾
  • Python 主程式: pyshiny_01_hello.py, 程式名稱不一定是 app.py
  • Python 主程式路徑: D:\shinydemo\pyshiny_01_hello\pyshiny_01_hello.py


執行方式:

Windows 開啟命令提示字元,輸入以下內容:

  • d:
  • cd shinydemo
  • shiny run --reload pyshiny_01_hello/pyshiny_01_hello.py
  • 瀏覽器輸入 http://localhost:8000/






參考資料:

  1. RWEPA: http://rwepa.blogspot.com/
  2. RWEPA shiny: http://rwepa.blogspot.com/search?q=shiny
  3. Shiny for R: https://shiny.rstudio.com/
  4. Shiny for Python: https://shiny.rstudio.com/py/
  5. shiny for Python 實作篇2 – 01_hello 程式碼: https://github.com/rwepa/shiny_python

# end

2021年10月28日 星期四

R shiny - 品質管制圖(quality control chart)應用

主題

中華民國品質學會第57屆年會暨2021國際品質管理研討會

論壇:開源AI品質工具-統計品管與實務應用

日期:2021年11月6日(六)

大綱

  1. Python 實作DoE常用的分析方法
  2. Shiny 套件簡介
  3. 互動式統計品管網頁實作
  4. Q & A

教材 PDF:

https://github.com/rwepa/csq_spc

本專案使用免費R語言與免費 shiny 套件, 實作品質管制圖(quality control chart)應用.











下載資料

1. spc_wafer_with_header.csv (with header):

https://github.com/rwepa/shiny_spc/blob/main/data/spc_wafer_with_header.csv

2. spc_pistonrings_without_header.csv (without header)

https://github.com/rwepa/shiny_spc/blob/main/data/spc_pistonrings_without_header.csv

線上示範

https://rwepa.shinyapps.io/shiny_spc/

套件

shiny : Web Application Framework for R (網頁服務框架)

shinythemes: Themes for Shiny (佈景主題)

DT : DataTables JavaScript library (表格呈現)

qcc : Quality Control Charts (品質管制圖的數據計算)

plotly: Create Interactive Web Graphics via 'plotly.js' (互動式圖表)

R程式碼下載

https://github.com/rwepa/shiny_spc

# end

2021年4月27日 星期二

R shiny - reactable 互動表格視覺化


主題

R在使用 shiny 套件建立網頁應用程式時,如果希望表格可以產生互動視覺化效果,此時可以使用 reactable 套件[1]。詳細使用方法參考 reactable 官網[2]之說明。本篇文章範例3使用sparkline套件以繪製表格折線圖[3]

使用觀念

1. reactable 套件使用五動式表格的函數為 reactable。

2. 如果希望配合 shiny 套件使用,則使用以下二種情形:
  1. ui.R 使用 reactableOutput 函數
  2. server.R 使用 renderReactable 函數
3. 表格功能:
  • 定義欄名稱 Column definitions
  • 排序 Sorting
  • 排序與自定NA值 Sorting with NA
  • 篩選 Filtering
  • 搜尋 Search
  • 分頁大小 Pagination
  • 群組與匯總 Grouping and Aggregation
  • 欄格式(貨幣,百分比,日期格式等) Column formatting
  • 表格加上繪圖(直方圖,盒鬚圖,線圖等) Columns plot
  • 佈景主題 Theme

關鍵字

#shiny
#reactable
#reactableOutput
#renderReactable 

R程式碼下載

R程式碼

# title    : reactable package
# date     : 2021.04.27
# author   : Ming-Chang Lee
# email    : alan9956@gmail.com
# RWEPA    : http://rwepa.blogspot.tw/
# Encoding : UTF-8

# 範例1 - 表格應用
library(reactable)

reactable(CO2)

# 範例2 - shiny 加上表格應用
library(shiny)

library(reactable)

ui <- fluidPage(
  titlePanel("reactable package example"),
  reactableOutput("table")
)

server <- function(input, output, session) {
  output$table <- renderReactable({
    reactable(CO2)
  })
}

shinyApp(ui, server)

# 範例3 - 表格加上折線圖 sparkline

library(dplyr)     #進行 %>% 操作
library(sparkline) #繪製表格折線圖
library(reactable)

mydata <- iris %>%
  group_by(Species) %>%
  summarise(width = list(Petal.Width)) %>%
  mutate(boxplot = NA, sparkline = NA)

reactable(mydata, columns = list(
  width = colDef(cell = function(values) {
    sparkline(values, type = "bar", chartRangeMin = 0, chartRangeMax = max(iris$Petal.Width))
  }),
  boxplot = colDef(cell = function(value, index) {
    sparkline(mydata$width[[index]], type = "box")
  }),
  sparkline = colDef(cell = function(value, index) {
    sparkline(mydata$width[[index]])
  })
))
# end

參考資料


2021年4月12日 星期一

2021-R軟體與Shiny Web應用程式設計


課程目標:

以R語言做為Web服務平台,使學員熟悉使用shiny套件建立Web化服務應用。

Shiny套件的主要功能 (revised from: Hadley Wickham, 2021)

1. 建立企業級儀表板

2. 互動式篩選資料分析

3. 使用視覺化與互動式溝通

4. 建立自我資料分析的工作流程

5. 建立互動式統計教學與資料科學概念,調校參數,理解結果之改變.

6. 提供決策者探索式資料分析等企業智慧計算應用.


課程大綱:

1.基礎shiny程式設計

1.1 shiny套件簡介

1.2 建立第一個shiny網頁程式

1.3 資料物件處理(tidyr, dplyr, stringr套件)

1.4 輸入控制項與檔案上傳

1.5 輸出控制項(文字,表報,圖形ggplot2, leaflet)

1.6 案例示範與操作練習(一)

2.進階shiny程式設計

2.1 版面配置

2.2 HTML UI

2.3 反應型函數(Reactive function)

2.4 shape檔案的輸入與處理

2.5 地理資料-shiny進階網頁程式

2.6 案例示範與操作練習(二)

上課日期:

2021年5月8,9日

報名網頁:

https://www.iiiedu.org.tw/courses/msa331t2101/

2021/5/3前報名即可享優惠價!

#shiny

#visualization

#training

#ggplot2

#leaflet

2021年3月15日 星期一

R shiny 互動模型 crosstalk 套件








主題

R在使用 shiny 套件建立網頁應用程式時, 如果希望二個控制項 (widgets)產生互相聯動效果, 此時可考慮使用 crosstalk 套件[1]. 例如:圖形上選取一個或一個以上之範圍,旁邊自動篩選資料值. 詳細使用方法參考crosstalk官網[2]之說明. 此互動式功能與 plotOutput("plot1", click = "plot_click")[3]功能類似. 本範例說110年2月年粗出生率(%)之互動式繪圖, 資料來源[4].

使用觀念

  1. crosstalk 套件使用 R 的API稱為SharedData R6 class
  2. 將SharedData物件傳遞給資料框或其他R物件,即可產生互動連結之效果。
  3. 支援使用 htmlwidget 套件客製化互動控制項。

關鍵字
#shiny
#crosstalk
#interactive plot
#leaflet

套件
library(readxl)    # read_excel 匯入 Excel 資料檔
library(crosstalk) # SharedData 互相聯動效果
library(leaflet)   # leaflet    互動式地圖
library(DT)        # datatable  互動式表格
library(htmltools) # tags       HTML標籤

執行結果











R程式碼下載


R程式碼


# date     : 2021.03.16
# author   : Ming-Chang Lee
# email    : alan9956@gmail.com
# RWEPA    : http://rwepa.blogspot.tw/
# Encoding : UTF-8

library(readxl)    # read_excel
library(crosstalk) # SharedData
library(leaflet)   # leaflet
library(DT)        # datatable
library(htmltools) # tags

# 匯入資料
# https://github.com/rwepa/DataDemo/blob/master/taiwan_birth.xlsx
birth <- read_excel("taiwan_birth.xlsx")

# 將資料轉換為 SharedData 物件
df <- SharedData$new(birth[c("city", "annua_crude_birth_rate", "longitude", "latitude")])

# 建立標題標題
rr <- tags$div(
  HTML('<a href="http://rwepa.blogspot.com/">110年2月粗出生率%</a>')
)

# 建立2行互相聯動效果
bscols(widths = c(5, 7),
  leaflet(df, height=700) %>% 
    addTiles() %>% 
    addMarkers(popup = ~city) %>% 
    setView(lng = 120.9876, lat = 23.8387, zoom = 7) %>%
    addControl(rr, position = "topright"),
  datatable(df,
            rownames = FALSE,
            colnames = c("地區","110年2月台灣粗出生率%", "經度", "緯度"),
            options = list(pageLength = 10,
                           searching = FALSE),
            height=600)
)
# end

2021年1月21日 星期四

水文建模shiny應用 (Hydrological Modelling with shiny app)

主題

R在水文模型具有廣泛應用,包括水文資料的讀取與下載,水文資料分析與建模,詳細可參考 CRAN-Hydrology  [https://cran.r-project.org/web/views/Hydrology.html]。 其中 AirGR套件提供水文建模工具,該套件包括降雨徑流模型,積雪和融雪模型以及相關的校準和評估功能。另 airGRteaching套件,將建模結果以互動式網頁呈現,提供使用者更進一步的水文分析與應用。如果需修改為職場的內容,可修改 "C:\Users\88697\Documents\R\win-library\4.0\airGRteaching\ShinyGR"資料夾的 ui.R,server.R 二個檔案。

執行結果1: 水文模型


執行結果2: 水文模型綱要圖





關鍵字

Hydrological Modelling 
# shiny

套件

1. airGR 套件 - 建立水文建模 https://cran.r-project.org/web/packages/airGR/index.html
2. airGRteaching 套件- 提供水文建模互動式網頁呈現 https://cran.r-project.org/web/packages/airGRteaching/index.html
3. shiny套件 - 提供互動式網頁功能 https://cran.r-project.org/web/packages/shiny/index.html

R程式碼下載


R程式碼

# title   : 水文建模shiny應用
# author  : Ming-Chang Lee
# email   : alan9956@gmail.com
# RWEPA   : http://rwepa.blogspot.tw/
# GitHub  : https://github.com/rwepa
# resource: https://rwepa.blogspot.com/2021/01/shiny-hydrological-modelling-with-shiny.html

# 安裝2個基本套件
# install.packages(c("airGR", "airGRteaching"))

# 使用remotes套件, 安裝最新版htmlwidgets套件
# 一定要安裝最新版htmlwidgets套件, 否則會有錯誤.
# install.packages("remotes")
# remotes::install_github("ramnathv/htmlwidgets")

library(airGRteaching)

# 載入L0123001資料集
data(L0123001, package = "airGR")

# 顯示物件清單
ls()
# [1] "BasinInfo" "BasinObs"

head(BasinObs)
# "DatesR": 年-月-日, POSIXct物件
# "P"  : average precipitation [mm/time step] 每日平均降雨量
# "T"  : catchment average air temperature [℃]  平均氣溫
# "E"  : catchment average potential evapotranspiration [mm/day] 平均潛在蒸發量
# "Qls": outlet discharge [l/s] 出水口排出量
# "Qmm": outlet discharge [mm/day] 出水口排出量

# 建立低地盆地資料
BV_L0123001 <- BasinObs[0001:6000, c("DatesR", "P", "E", "Qmm", "T")]

# 建立多山盆地資料
BV_L0123002 <- BasinObs[5000:9999, c("DatesR", "P", "E", "Qmm", "T")]
BI_L0123002 <- BasinInfo

# 建立互動式網頁資料分析
ShinyGR(ObsDF = list("Low-land basin" = BV_L0123001, "Mountainous basin" = BV_L0123002),
        ZInputs = list(NULL, median(BI_L0123002$HypsoData)),
        HypsoData = list(NULL, BI_L0123002$HypsoData),
        NLayers = list(5, 5),
        SimPer = list(c("1994-01-01", "1998-12-31"), c("2004-01-01", "2006-12-31")),
        theme = "United")

# theme 預設值為 "RStudio",可修改為以下值:
# ["Cerulean""Cyborg""Flatly""Inrae""Saclay""United" or "Yeti"]

2020年2月13日 星期四

2020新型冠狀病毒視覺化

Visualizing the COVID-19

# COVID-19
# 新型冠狀病毒
# 視覺化
# visualization
# get 函數
# leaflet 套件


本篇文章說明新型冠狀病毒全球分佈視覺化分析

參考資料: https://systems.jhu.edu/research/public-health/ncov/

資料集: https://github.com/CSSEGISandData/COVID-19


  • 使用 leaflet套件, 使用者可以與視覺化地圖建立互動式操作.
  • get {base} 函數可將字串轉換為欄位名稱
  • aggregate {stats} 可計算每個國家群組之小計



2018年9月2日 星期日

R程式除錯與效能提升設計

R程式除錯與效能提升設計

(Debug and performance improvements in R)


# R程式錯誤種類
# 除錯方法
# 除錯實務應用
# shiny除錯
# 效能提升

1. R程式錯誤種類

在1947年9月9日,葛麗絲·霍普(Grace Hopper)發現了第一個電腦上的bug。因此,人們逐漸開始用「Bug」(原意為「蟲子」)來稱呼電腦中的隱藏錯誤。即程式執行時,畫面顯示錯誤或整個程式沒反應,此時一般稱呼程式產生臭蟲(Bug),僅接著是找出臭蟲並進行錯誤修正,此步驟稱為除錯或偵錯(Debug),常見的程式錯誤包括以下四種情形,以下分別說明其內容。

(1)語法錯誤(Syntax Errors)
(2)編譯時期的錯誤(Compile Errors)
(3)執行時期錯誤(Run-time Errors)
(4)邏輯錯誤(Logical Errors)

1.1 語法錯誤
各種程式語言皆有其語法的規範,在撰寫程式過程中,如果程式不符合語法的規範,則會產生語法錯誤。語法錯誤可經由GUI編輯器,直接顯示錯誤訊息,例:R語言的免費GUI編輯器-RStudio(https://www.rstudio.com/products/RStudio/)。

例如:if 編輯if為IF,括號沒有成對使用,沒有先行匯入套件(Packages),結尾忘了加上「:」。

參考圖1 R語法錯誤,圖1上方 with bug 區塊中顯示語法錯誤「if 打成IF」,下方 complete debug 區塊中顯示已改為小寫if的正確結果。


圖1 R語法錯誤

1.2 編譯時期的錯誤
編譯時期的錯誤可以透過「編譯器(Compiler)」在編譯的時候就發現問題,較容易找出錯誤。

1.3 執行時期錯誤
執行時期的錯誤就比較難追蹤。例如:「 網路服務無法使用 」 的錯誤。二個數值相除,分母為零的錯誤,此階段可依據錯誤訊息而修正錯誤。緩衝區溢位(Buffer overflow)

1.4 邏輯錯誤
邏輯錯誤所造成的程式設計錯誤,例如,「 索引超出範圍 」 錯誤。使用者輸入不符合預期數值資料,例如,輸入英文字元。

程式錯誤情境中會有所謂例外(Exception),例外指的是程式發生不正常的錯誤,而導致無法繼續執行的情形。有的時候,僅管程式語法完全正確,當執行程式時仍然會有錯誤。這種在程式執行階段發生的錯誤亦稱為例外,並且會造成程式完全的終止且程式無法繼續執行。

2. 除錯方法

除錯的基本五大步驟:

2.1 發現程式錯誤的存在
在除錯前除了找出錯誤的現象,先備份原始程式碼或使用版本管理工具,亦是踏出基礎的原始碼管理的第一步。

2.2 小範圍逐步確認
以隔離、消除的方式對錯誤進行確認。例如:一次只修改一段程式區塊。

2.3 確定錯誤產生的原因
此步驟包括尋找類似的錯誤並查詢是否有類似的程式需要一併修正。

2.4 找出修正錯誤的解決辦法
此步驟可依不同程式語言所提供的除錯工具並找出修正錯誤的解決辦法。

2.5 修正錯誤,重新測試
最後依解決辦法進行修正錯誤並重新測試。

關於程式除錯,須注意以下的特性:

程式即便是正常執行,仍有可能隱藏錯誤

經過完整測試後的程式,亦有可能會有錯誤

語法錯誤(Syntactic errors)一般編譯器都會找出來這種錯誤

語義錯誤(Semantic errors)是編譯器所無法檢查出來的錯誤

良好的測試案例與清晰的程式碼註解可增近除錯的效率

典型除錯技術包括:
(1)單步執行(Single-stepping)
(2)插入中斷點(Breakpoint)
(3)新增並追蹤額外變數法
(4)在問題點附近加入Try/Catch等方式以利於鎖定錯誤範圍

3. 除錯實務應用

在除錯實務應用中,R語言提供以下除錯函數,以利於錯誤發生時,允許程式設計師採取某些行動,進而達到除錯目的。

3.1 traceback()
如果程式錯誤並已完全終止,此時立即使用 traceback 將顯示錯誤前的最近執行的語法。

參考圖2 traceback 除錯結果,圖中顯示 traceback 會採用由上至下的方式取出錯誤堆疊(Stack)的結果,因此先顯示h(b)第2行的錯誤訊息,其次為g(a),最後才是f(1)。


圖2 traceback除錯

3.2 debug()
traceback 只能指出錯誤的發生處,並不能幫助使用者找出程式的錯誤。debug 可以逐行執行並提供互動式的除錯功能。debug 提供函數作為參數輸入,因此對於使用者建立或內建函數除錯提供更有用的除錯資訊。完成除錯後可使用 undebug 來移除 debug 功能。debug 可以輸入下四種指令與R函數,例:ls()函數:

n 繼續執行下一行程式,按下[Enter]鍵亦可。

c 繼續執行後續所有程式並回傳結果。

Q 中斷程式。

where 顯示呼叫所有函數堆疊。

參考圖3 debug 除錯結果,考慮計算總平方差(Sum of Squared Differences,SSD)並建立SSD函數,僅接著使用n與ls函數()進行debug除錯。


圖3 debug除錯

3.3 browser()
在上述 debug() 函數中可以逐行除錯,如果希望在特定程式碼中進行除錯,此時可使用 browser() 函數,將程式暫時中斷並等待使用者輸入。

參考圖4 browser 除錯結果,考慮修正上個步驟計算總平方差並建立SSD函數。


圖4 browser除錯

3.4 try()
參考圖5 try 除錯結果,考慮log輸入不正確字元參數 RWEPA,其結果會顯示Error而中斷程。修正後加上 try 函數即可繼續執行後續程式並顯示log(3)之結果。try(…, silent=TRUE)函數,其結果會隱藏錯誤訊息。


圖5 try除錯

3.5 tryCatch()
參考圖6 tryCatch除錯,如果希望針對錯誤(Error)或警告(Warning)等不同情形,提供對應的解決方式,此時可考慮使用 tryCatch 函數。範例中分別加上 warning 與 error 的處理方式,因此程式不會中止,而可顯示不同結果。


圖6 tryCatch除錯

3.6 withCallingHandlers()
withCallingHandlers 與 tryCatch 功能類似。主要有兩大區別,分別參考圖7 withCallingHandlers除錯-回傳值與圖8 withCallingHandlers除錯-運作方式與以下說明:

tryCatch()處理程序的回傳值由tryCatch()定義,而 withCallingHandlers()的回傳值會被忽略,參考圖7。


圖7 withCallingHandlers除錯-回傳值

使用sys.calls()查閱對應的中間過程,withCallingHandlers 的運作方式相當於 traceback 用法,如下所示,它列出了導致當前函數的所有調用,參考圖8。


圖8 withCallingHandlers除錯-運作方式

4. shiny除錯

shiny套件是網頁應用程式,一般只有在shiny程式執行時,才會顯示程式是否正常執行。例:在"01_hello" 範例中,如果須測試 input 輸入控制項之結果,則可在bins之前先行輸入 # input <- list(bins=30) 前面加上#,以免正式執行時,永遠bins為30。總而言之,輸入控制可於input中宣告為list,以利事先了解其執行結果或加速shiny除錯,詳細結果參考圖9所示。

library(shiny)
runExample("01_hello")
output$distPlot <- renderPlot({ x <- faithful$waiting bins <- seq(min(x), max(x), length.out = input$bins + 1)


圖9 shiny除錯

5. 效能提升

一般考慮以下方式,可提升程式執行效能:

(1)採用矩陣運算

(2)使用圖形處理器(graphics processing unit,GPU)運算

(3)使用平行運算處理技術,主要包括資料平行處理和工作平行處理(data parallelism and task parallelism)。