使用反应性添加多个变量
Using reactivity to add multiple variables
我想使用 R shiny 中的操作按钮一个接一个地添加变量。
例如,我想创建一个这样的等式:Y=X1+X2+X3。但是,我必须通过一次添加一个单独的变量并按下操作按钮来做到这一点。
步骤:
select 因变量 (Y) 相同且不会改变。
select 一个自变量:(X1) 并按 calculate
。 UI 将显示 Y=X1
如果我再次 select 一个不同的自变量 (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)
您不能修改用户输入变量 input$ind_var
和 input$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)
})
}
我想使用 R shiny 中的操作按钮一个接一个地添加变量。 例如,我想创建一个这样的等式:Y=X1+X2+X3。但是,我必须通过一次添加一个单独的变量并按下操作按钮来做到这一点。
步骤:
select 因变量 (Y) 相同且不会改变。
select 一个自变量:(X1) 并按
calculate
。 UI 将显示Y=X1
如果我再次 select 一个不同的自变量 (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)
您不能修改用户输入变量 input$ind_var
和 input$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)
})
}