【问题标题】:R Shiny App, Dynamic Slider ValueR Shiny App,动态滑块值
【发布时间】:2018-01-15 00:11:47
【问题描述】:

我需要一个基于外部函数的动态滑块值。在这里,我基于 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() )

})

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

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

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    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)
    

    【讨论】:

    • 太棒了。正是我需要的。谢谢。
    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 2016-11-06
    • 2021-10-12
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多