我在 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)
在我点击按钮后,通常是生成数据帧的脚本源,我希望切片器的最大值是该数据帧中
y
的最大值,但因为UI是在数据帧之前生成的,所以我很挣扎这样做。脚本的结果可能会有所不同,因此我想以通用方式生成最大值。 到目前为止我已经尝试过的;
sliderInput("slider1",
label = "test",
min = 5, max = if(exists("df")){max(df$y)}else{1}, value = 5)
但是这不起作用,它会给出相同的错误,就像我将最大值设置为
max(df$y
一样。所以我的问题是一般性的;有没有一种方法可以在服务器中渲染某些内容后设置 UI 元素的值?预先感谢您!
updateSliderInput()
。将其添加到服务器部分的
observeEvent
中:updateSliderInput(session, "slider1", max = max(df$y))