使用反应性添加多个变量

Using reactivity to add multiple variables

我想使用 R shiny 中的操作按钮一个接一个地添加变量。 例如,我想创建一个这样的等式:Y=X1+X2+X3。但是,我必须通过一次添加一个单独的变量并按下操作按钮来做到这一点。

步骤:

  1. select 因变量 (Y) 相同且不会改变。

  2. select 一个自变量:(X1) 并按 calculate。 UI 将显示 Y=X1

  3. 如果我再次 select 一个不同的自变量 (X2) 并按 calculate,UI 应该显示 Y=X1+X2

  4. 如果进一步单击操作按钮,则继续此过程。

假设只能添加变量。

library(shiny)
library(shinydashboard)

ui <-  
  dashboardPage(
    dashboardHeader(),
    dashboardSidebar(
    selectInput("dep_var", label = "dependent",  choices = c('Y', 'Z'), selected = 'Y', multiple = F),
    selectInput("ind_var", label = "Independent",  choices = c('X1', 'X2', 'X3', 'X4'), selected = 'X1', multiple = F),
    actionButton("add_equation", "Add equation"),
    actionButton('clear', 'Clear equation')),
    dashboardBody(uiOutput('equation'))
    )

server <-function(input, output) {
  
  x_var <- reactive({
    x = paste0(input$ind_var)
    x
  })
  
  observeEvent(input$add_equation, {
    isolate(x_var())
  })  
  
  observeEvent(input$clear, {
    input$ind_var <- NULL
    input$dep_var <- NULL
  })  
  output$equation <- renderUI({
    paste0(input$dep_var, '=', x_var())
  })
  
}

shinyApp(ui, server)

您不能修改用户输入变量 input$ind_varinput$dep_var。而是创建 reactiveValues 对象并修改它。试试这个

server <-function(input, output) {
  y_var <- reactiveValues(eqn=NULL)
  cntr <- reactiveVal(1)
  
  observeEvent(input$add_equation, {
    if (cntr()==1) {
      cntr(2)
      y_var$eqn <- paste0(input$ind_var)
    }else {
      cntr(cntr() + 1)
      y_var$eqn <- paste0(y_var$eqn,' + ', input$ind_var)
    }
  })  
  
  observeEvent(input$clear, {
    cntr(1)
    y_var$eqn <- NULL
  })  
  output$equation <- renderUI({
    paste0(input$dep_var, '=', y_var$eqn)
  })
  
}