R 使用反应性添加多个变量

R 使用反应性添加多个变量,r,shiny,reactive,R,Shiny,Reactive,我想使用R中的action按钮一个接一个地添加变量。 例如,我想创建这样一个方程:Y=X1+X2+X3。但是,我必须通过一次添加一个单独的变量并按下一个操作按钮来实现这一点 步骤: 选择相同且不会改变的因变量(Y) 选择一个自变量:(X1)并按计算。用户界面将显示Y=X1 如果我再次选择一个不同的自变量(X2)并按calculate,UI应该显示Y=X1+X2 如果进一步单击“操作”按钮,请继续此过程 假设只可能添加变量 library(shiny) library(shinydashb

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

步骤:

  • 选择相同且不会改变的因变量(Y)

  • 选择一个自变量:(X1)并按
    计算
    。用户界面将显示
    Y=X1

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

  • 如果进一步单击“操作”按钮,请继续此过程

  • 假设只可能添加变量

    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)
    
    库(闪亮)
    图书馆(shinydashboard)
    
    用户界面您不能修改用户输入变量
    输入$ind\u var
    ,和
    输入$dep\u 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)
      })
      
    }
    
    服务器