shiny是R中一款比较实用的R包,他能帮助你在没有掌握太多的css和html知识的情况下,轻松地制作一个高效编辑的网页应用。当然,shiny在当前主流语言python中也有应用。
接下来让我们一起来了解shiny包。
1.安装包
首先我们需要安装shiny包
install.packages("shiny")
2.基本构架
shiny app在使用过程中主要由两部分构成。
1.ui(用户交互界面制作)
2.server(服务器运行流程制作)
一般在使用过程习惯放在一个脚本中,当然看个人喜好,也可以分开哈
library(shiny)
ui<-fluidPage(
...
)
server<-function(input, output) {
...
}
shinyApp(ui,server)
ui的设计需要考虑网页的排版,主要包括文字、文件等信息的输入方式和位置,服务器运行流程中可控参数的调节方式和位置,网页过程或者最终需要展示或者下载的图表的区域。对于一些复杂的网页,需要考虑页面的切换等。
常用的一些输入包括fileInput、textInput、selectInput、numericInput等,要依据server中的信息来控制输入,可以通过uiOutput来实现。也可以通过tags$style()、h1()等css和html语言语句来实现网页的更专业化设计。actionButton()等控制开关的使用可以提高网页运行的操控性和逻辑性。简单的设计往往一蹴而就,复杂而美观的设计就需要劳神费心。
server的设计需要考虑运行结果与ui界面中控制开关的交互,逻辑清晰,这样才可以通过你的操作输出你想要的结果。
reactive()函数可以创建一个响应表达式,reactiveValues()可以保存一些结果,两者可以防止Shiny重新运行不必要的代码。renderPlot()、renderTable()等可以将图表传递到网页上展示,这里推荐DT包,可以更好地展示表格。downloadHandler()常应用于图表结果的保存。
实践操作时其实选择的方法和掌握的知识还是蛮多的,毕竟R包比较庞大。
3.案例展示
这里简单推荐一个用于常规的ui框架界面的R包(shinydashboard)(哈哈,又省去了界面框架设计)
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title="专属小页面"),
dashboardSidebar(
textInput(inputId="text",label = "文本信息上传"),
selectInput(inputId="select",label = "选项信息上传",choices = c("select1","select2","..."))
),
dashboardBody(
box(plotOutput("plot1"))
)
)
server <- function(input, output) {
output$plot1 <- renderPlot({
data <- data.frame(sample=1:10,select1=rnorm(10),select2=1:10)
plot(data[,1],data[,input$select],main=input$text)
})
}
shinyApp(ui, server)
这样,一个简单的可以选择不同数据绘制的小网页就制作完成啦!
嗯!!!,慢慢拓展还是会发现shiny中的知识还是蛮多的,一个复杂的网页制作也不会显得太轻松,未来可能还是AI制作网页比较舒适,值得期待。