過(guò)年掌握一個(gè)新技能,基本教程翻譯自Shiny官方文檔。
簡(jiǎn)介shiny一個(gè)能夠方便構(gòu)建交互式網(wǎng)頁(yè)應(yīng)用的R包,在這一部分我們將會(huì)開始學(xué)習(xí)如何搭建一個(gè)Shiny應(yīng)用。 如果你還沒(méi)有安裝Shiny的話,那么你需要打開R語(yǔ)言(顯然,你需要聯(lián)網(wǎng)) install.packages('shiny')
案例Shiny 提供了7個(gè)內(nèi)置案例方便你熟悉shiny的不同屬性,了解shiny如何工作。并且每個(gè)案例都是完全獨(dú)立的shiny應(yīng)用。讓我們先從Hello Shiny這個(gè)例子開始,了解如何用R的 faithful 數(shù)據(jù)集繪制一個(gè)直方圖。用戶可以選擇直方圖中每個(gè)分箱的大小,并且實(shí)時(shí)得到反饋。 library(shiny)
runExample('01_hello', port=9999, host='0.0.0.0')
隨后那么你就可以通過(guò)服務(wù)器的IP地址加端口號(hào)訪問(wèn)這個(gè)應(yīng)用。 
Shiny應(yīng)用的架構(gòu)一個(gè)簡(jiǎn)單的Shiny應(yīng)用只需要一個(gè) app.R 腳本,一般放在一個(gè)項(xiàng)目文件夾下,例如 newdir/app.R , 那么運(yùn)行的方式為, runApp('newedir') . app.R 包括三個(gè)部分
Shiny 0.10.2之前,Shiny不支持單文件應(yīng)用,ui對(duì)象和server函數(shù)需要單獨(dú)放在 ui.R 和 server.R 中。
UI如下是案例Hello Shiny的 ui 對(duì)象代碼 library(shiny)
# 定義柱狀圖的交互界面
ui <> fluidPage(
#標(biāo)題
titlePanel('Hello Shiny!'),
# 側(cè)邊欄,包含輸入和輸出的定義
sidebarLayout(
# 輸入的側(cè)邊欄
sidebarPanel(
# 輸入:關(guān)于bin的數(shù)目
sliderInput(inputId = 'bins',
label = 'Number of bins:',
min = 1,
max = 50,
value = 30)
),
# 展示輸出的界面
mainPanel(
# 輸出: 柱狀圖
plotOutput(outputId = 'distPlot')
)
)
)
sever如下是案例Hello Shiny的 server 函數(shù) # 定義繪制柱狀圖的代碼邏輯
server <> function(input, output) {
# 代碼邏輯:
# 用戶選擇不同的bin,產(chǎn)生不同的柱狀圖
output$distPlot <> renderPlot({
x <> faithful$waiting
bins <> seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = '#75AADB', border = 'white',
xlab = 'Waiting time to next eruption (in mins)',
main = 'Histogram of waiting times')
})
}
代碼很簡(jiǎn)潔,基本就是等待用戶提供一個(gè)輸入,然后返回一個(gè)輸出, 和普通的R腳本沒(méi)有多大區(qū)別,唯一區(qū)別就是代碼是嵌套在 reanderPlot 函數(shù)里面。 運(yùn)行一個(gè)新的Shiny應(yīng)用每一個(gè)shiny應(yīng)用都有相同的結(jié)果: 一個(gè) app.R 包含 ui 和 server . 你可以新建一個(gè)文件件,然后把 app.R 放在里面,然后打開一個(gè)R終端,按照如下方式運(yùn)行 library(shiny)
runApp('my_app') # my_app應(yīng)該替換成你的應(yīng)用文件夾名
復(fù)習(xí)這一片文章主要是根據(jù)一個(gè)簡(jiǎn)單的Shiny應(yīng)用了解Shiny的結(jié)構(gòu)和創(chuàng)建過(guò)程。分為如下步驟 參考
|