Shiny中的反应变量用于以后的计算

时间:2016-12-06 14:33:21

标签: r shiny

这里的新手。

我有一个输出写入公式的结果,变量基于输入

output$text_calc <- renderText({
    paste("The result is =", input$num_W * input$num_l - input$slider_a... )
    })

为了避免我的大脑爆炸长公式,我如何将输入定义为单个字母变量?我试过l <- input$num_l给了我

“没有活跃的反应上下文就不允许操作。(你试图做一些只能在反应式表达式或观察者内部完成的事情。)”

在代码周围放置reactive({})

错误:无法强制将类型'封闭'强制转换为'character'类型的向量

2 个答案:

答案 0 :(得分:5)

尝试类似下面的示例。另请注意,使用reactive表达式

中的输入

示例1

#rm(list = ls())
library(shiny)
ui <- shinyUI(fluidPage(
  mainPanel(
    numericInput("num_W", "Observations:", 10,min = 1, max = 100),
    numericInput("num_l", "Observations:", 10,min = 1, max = 100),
    sliderInput("slider_a","test",value = 1,min=1,max=20,step=1),
    textOutput("text_calc"))
))
server <- shinyServer(function(input, output,session){
  output$text_calc <- renderText({
    W <- input$num_W
    L <- input$num_l
    A <- input$slider_a
    paste("The result is =", W*L-A)
  })
})

shinyApp(ui = ui, server = server)

示例2,使用reactiveValues()

#rm(list = ls())
library(shiny)
ui <- shinyUI(fluidPage(
  mainPanel(
    numericInput("num_W", "Observations:", 10,min = 1, max = 100),
    numericInput("num_l", "Observations:", 10,min = 1, max = 100),
    sliderInput("slider_a","test",value = 1,min=1,max=20,step=1),
    textOutput("text_calc"))
))
server <- shinyServer(function(input, output,session){

  vals <- reactiveValues()
  observe({
    vals$W <- input$num_W
    vals$L <- input$num_l
    vals$A <- input$slider_a
  })

  output$text_calc <- renderText({
    paste("The result is =", vals$W*vals$L-vals$A)
  })
})

shinyApp(ui = ui, server = server)

enter image description here

答案 1 :(得分:0)

如果您想在其他地方重复使用此公式,请避免重新计算:

server <- shinyServer(function(input, output,session){

  formula <- reactive({
    W <- input$num_W
    L <- input$num_l
    A <- input$slider_a
    W*L-A
  })


  output$text_calc <- renderText({
    paste("The result is =", formula())
  })


})