在渲染表格闪亮后设置 sliderInput 值

问题描述 投票:0回答:1

我在 Rhsiny 中构建了一个应用程序,它自己包含多个应用程序。 它由多个选项卡和子选项卡组成,它们都有自己的工具。 现在我想将切片器的值设置为数据帧中的最大值,但数据帧最初尚未渲染,因此我很难在 UI 中设置值。我不想在加载应用程序之前生成表,因为我有很多其他应用程序,并尝试保持工作区尽可能干净,即,如果未打开此选项卡,我不想加载表/运行脚本等。我尝试做的一个小例子;

library(shiny)
library(dplyr)

ui <- fluidPage(
  fluidPage(
    
    sidebarLayout(
      sidebarPanel(
        helpText("test"),
        
        actionButton("btn1", "Run script"),
        
        sliderInput("slider1",
                    label = "test",
                    min = 5, max = 100, value = 5)
      ),
      
      mainPanel(
        tableOutput("dt")
      )
    )
  )
)

server <- function(input, output, session) {
  observeEvent(input$btn1,{
    #source(something)
    df <- data.frame(x = 1:10, y = sample.int(100,10))
    output$dt <- renderTable({
      df %>%
        filter(y >= input$slider1)
    })
  })
}
shinyApp(ui, server)

UI

在我点击按钮后,通常是生成数据帧的脚本源,我希望切片器的最大值是该数据帧中

y
的最大值,但因为UI是在数据帧之前生成的,所以我很挣扎这样做。脚本的结果可能会有所不同,因此我想以通用方式生成最大值。 到目前为止我已经尝试过的;

sliderInput("slider1",
                    label = "test",
                    min = 5, max = if(exists("df")){max(df$y)}else{1}, value = 5)

但是这不起作用,它会给出相同的错误,就像我将最大值设置为

max(df$y
一样。所以我的问题是一般性的;有没有一种方法可以在服务器中渲染某些内容后设置 UI 元素的值?预先感谢您!

r shiny
1个回答
0
投票
updateSliderInput()

。将其添加到服务器部分的

observeEvent
中:
updateSliderInput(session, "slider1", max = max(df$y))

	
© www.soinside.com 2019 - 2024. All rights reserved.