R Shiny App,动态滑块值

时间:2018-01-15 00:11:48

标签: r shiny

我需要一个基于外部函数的动态滑块值。在这里,我使用了runif(...),然而,对于我的真实应用程序,它是一个从互联网上检索价值的网络电话,可能每天更换一次或类似的事情。

global.R

dynamicValue = function(){
  runif(1)
}

ui.R

library(shiny)

shinyUI(
  fluidPage(
     shiny::sidebarPanel(
       sliderInput("slider",
                   "SliderInput",
                   min   = 0,
                   max   = 1,
                   value = dynamicValue()
       )
     ),
     shiny::mainPanel(

     )
  )
)

现在上面的问题是它只被解析一次,就像页面被刷新一样,值仍然是持久的。

这可以通过以下方式解决:

server.R

library(shiny)

shinyServer(function(input, output, session) {

  updateSliderInput(session,  "slider", value = dynamicValue() )

})

但是,我有很多绘图,它们渲染一次,然后更新滑块,导致所有内容失效并再次渲染。

有人可以向我解释我如何拥有一个动态滑块,其中的值是根据非确定性函数确定的,每次加载页面时,以及在处理其他任何内容之前都会解析。

1 个答案:

答案 0 :(得分:2)

Shiny中一个鲜为人知的特性是静态UI可以是在每个连接上调用的函数。它与Rook兼容的HTTP请求对象(在此可以忽略)需要一个可选参数。

我不记得这是在哪里记录的,但在https://shiny.rstudio.com/reference/shiny/latest/enableBookmarking.html

中提到了它

在函数中包装UI,滑块输入在每次加载页面时都会获得一个随机值。

library(shiny)

dynamicValue = function(){
  runif(1)
}

ui <- function(request) {
  fluidPage(
    shiny::sidebarPanel(
      sliderInput("slider",
                  "SliderInput",
                  min   = 0,
                  max   = 1,
                  value = dynamicValue()
      )
    ),
    shiny::mainPanel(
    )
  )
}

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

shinyApp(ui, server)