对于R闪亮应用程序中的许多输出变量,如何对输入变量执行相同的计算?

时间:2018-01-12 08:58:48

标签: r shiny reactive

场合

我有一个带有一个滑块输入和两个文本输出的shinyApp。应用程序对输入进行一些计算,并在静态文本字段中返回输出。这是我目前的代码:

library(shiny)

ui=fluidPage(
  sliderInput("slider", "Slide Me", 0, 100,1),
  textOutput("result01"),
  textOutput("result02")
)

server=function(input,output){

output$result01=renderText({
  MYVARIABLE=(input$slider)^12
  MYVARIABLE+34543
  })

output$result02=renderText({
  MYVARIABLE=(input$slider)^12
  MYVARIABLE+67544
})

}

shinyApp(ui, server)

问题

代码是无效的,因为它执行相同的计算TWICE:

MYVARIABLE=(input$slider)^12

目前这没关系,因为计算并不十分复杂,因为我只有两个输出。然而,在未来,我想同时对更多输出进行更复杂的计算。

愿望

要仅进行一次而不是多次相同的计算,我想在服务器端执行类似的操作:

server=function(input,output){

MYVARIABLE=(input$slider)^12

output$result01=renderText({
  MYVARIABLE+34543
  })

output$result02=renderText({
  MYVARIABLE+67544
})

}

但是,这会出现以下错误消息:

Error in .getReactiveEnvironment()$currentContext() : 
  Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)

问题

我需要将代码更改为什么才能使其正常工作? (先谢谢。)

1 个答案:

答案 0 :(得分:0)

我们可以将其放在reactive

library(shiny)
options(scipen = 999) 
ui <- fluidPage(
  sliderInput("slider", "Slide Me", 0, 100,1),
  textOutput("result01"),
  textOutput("result02")
)

server <- function(input,output){

  MYVARIABLE <- reactive({(input$slider)^12})

  output$result01 <- renderText({
    MYVARIABLE()+34543
  })

  output$result02 <- renderText({
    MYVARIABLE()+67544
  })

}

shinyApp(ui, server)

-output

enter image description here