工作流系列將向讀者介紹如何提升 3 個重要的 Shiny 工作流:
- 創(chuàng)建應(yīng)用,進行更改并嘗試結(jié)果的基本開發(fā)周期。
- 調(diào)試,找出代碼出了什么問題的技巧,并集思廣益地解決該問題。
- 編寫 reprexes,這些獨立的代碼段說明了問題。 Reprexes是一種強大的調(diào)試技術(shù),如果你想從別人那里獲得幫助,它們是必不可少的。
首先我們將學(xué)習(xí)開發(fā)工作流。
優(yōu)化開發(fā)工作流程的目標(biāo)是減少做出更改和看到結(jié)果之間的時間。迭代的速度越快,你可以進行的實驗就越快,你就可以成為一名更好的 Shiny 開發(fā)人員。這里有兩個主要的工作流程需要優(yōu)化:第一次創(chuàng)建應(yīng)用程序,以及加快代碼調(diào)整和試驗結(jié)果的迭代周期。
創(chuàng)建 Shiny 應(yīng)用
我們基本上使用相同的六行 R 代碼啟動每個應(yīng)用程序:
library(shiny)
ui <- fluidPage(
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
你可能很快就厭倦了鍵入該代碼,因此 RStudio 提供了一些快捷方式:
- 如果你已經(jīng)打開了要使用的 app.R,請鍵入
shinyapp,然后按 Shift + Tab 插入 Shiny 應(yīng)用程序片段。 - 如果要啟動新項目,請轉(zhuǎn)到“文件”菜單,選擇“新建項目”,然后選擇“Shiny 的 Web 應(yīng)用程序”:

讀者可能認為學(xué)習(xí)這些快捷方式不值得,因為你每天只會創(chuàng)建一兩個應(yīng)用程序,但是創(chuàng)建簡單的應(yīng)用程序是在開始較大項目之前檢查基本概念的好方法,它們是調(diào)試的絕佳工具。
查看你的更改
可能你每天只創(chuàng)建幾個應(yīng)用程序,但你將運行數(shù)百次應(yīng)用程序,因此掌握開發(fā)工作流程尤為重要。降低迭代速度的第一種方法是避免單擊“運行應(yīng)用程序”按鈕,而是學(xué)習(xí)鍵盤快捷鍵Cmd/Ctrl + Shift + Enter。這為你提供了以下開發(fā)工作流程:
- 編寫一些代碼。
- 使用快捷鍵啟動應(yīng)用程序。
- 交互式地測試應(yīng)用。
- 關(guān)閉應(yīng)用。
- 回到第 1 步。
進一步降低迭代速度的另一種方法是打開自動重新加載(options(shiny.autoreload = TRUE)),然后在后臺作業(yè)中運行該應(yīng)用,使用此工作流程,保存文件后,您的應(yīng)用將重新啟動:無需關(guān)閉并重新啟動。這將導(dǎo)致更快的工作流程:
- 編寫代碼并運行保存快捷鍵保存文件。
- 交互式地測試應(yīng)用。
- 回到第 1 步。
具體使用方法見 https://github.com/sol-eng/background-jobs/tree/master/shiny-job。
這種技術(shù)的主要缺點是,由于應(yīng)用程序是在單獨的進程中運行的,因此調(diào)試起來相當(dāng)困難。
隨著你的應(yīng)用程序變得越來越大,你會發(fā)現(xiàn)“交互式實驗”步驟開始變得繁重。很難記住要重新檢查應(yīng)用程序中可能受更改影響的每個組件。在后面的文章中,我們將學(xué)習(xí)自動測試的工具,該工具可讓我們將正在運行的交互式實驗轉(zhuǎn)換為自動代碼。這使我們可以更快地運行測試(因為它們是自動化的),這意味著我們不能忘記運行重要的測試。開發(fā)測試需要一些初期投資,但是對于大型應(yīng)用程序來說,這些投入是值得的。
控制視圖
默認情況下,運行該應(yīng)用程序時,它將顯示在彈出窗口中。我們可以從“運行應(yīng)用程序”下拉菜單中選擇其他兩個選項:

- 在查看器窗格中運行對于較小的應(yīng)用程序很有用,因為你可以在運行應(yīng)用程序代碼的同時看到它。
- 在外部瀏覽器中運行對于大型應(yīng)用程序很有用,或者如果你要檢查應(yīng)用程序的外觀是否與大多數(shù)用戶看到的情況完全相同。
