Shiny Basic系列:

参考教程:https://mastering-shiny.org/

(1)IO控件

(2)Layout布局

(3)Reactive用法

(4)Feedback提醒

(5)Module模块

Shiny Package系列:

(1)shinyWidgets

(2)shinyJS

(3)shinydashboard

(4)shinydashboardPlus

(5)bslib

(6)Other pkgs


在server端的代码,主要由多个reactive类型的代码块组成。

1
2
3
server <- function(input, output, session) {

}

1. render系列

计算输出结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
output$Var1 = renderXXX({ 
    ......
    input$Var1
    ......
})

renderText() # → textOutput
renderPrint() # → verbatimTextOutput
renderTable() # → tableOutput
renderDataTable() # → dataTableOutput
renderPlot() # → plotOutput
renderImage()  # → plotOutput

可renderXXX内的expression中的特定variable,通过isolate()函数包裹,使该变量值的变化不会引起renderXXX内的全部重新计算,以提高效率。

1
2
3
4
5
6
7
output$Var1 = renderXXX({ 
    ......
    isolate(input$Var1) #Var1变化不会触发更新
    input$Var2 #Var2变化会触发更新
    ......
})
# 也同样适用于下面的reactive({}), observe({})

2. reactive表达式

  • reactiveVal() 单个值
1
2
3
4
x <- reactiveVal(10)
x()
x(20) #修改
x()
  • reactiveValues() list类型
1
2
3
4
r <- reactiveValues(x = 10, y = "a")
r$x 
r$x <- 20 #修改
r$x
  • reactive()表达式
1
2
3
4
5
mid_var = reactive({
   ...
   isolate()
   ...
})
  • observe()与reactive类似,区别在于不返回结果,仅运算表达式,可用于更新reactive value;update widget等场景
1
2
3
4
5
observe({
   ...
   isolate()
   ...
})

3. 动作触发

通过监督特定值(通常为button)是否发生变化,来控制是否表达式里的计算过程。

此时表达式里包括的input值变化,不会触发表达式的重新计算

  • eventReactive()
1
2
3
mid_var = eventReactive(input$XXX, {
    
})
  • observeEvent()
1
2
3
observeEvent(input$XXX, {
    
})