You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R Shiny中如何实现滑动条对初始场景1的响应式更新?

实现思路

你只需要做两处核心调整:

  1. 新增一个锁标记判断「Add scenario」按钮是否被点击过,未点击时允许滑动条修改场景1数据,点击后锁定场景1不再修改
  2. 替换原有无效的input$periods监听逻辑,改为监听滑动条input$samples变化,在未锁定时更新场景1数据

完整可运行代码

library(shiny)
library(tidyverse)
library(ggplot2)

ui <- fluidPage(
  sliderInput('samples','Number of samples (X):',min=2,max=10,value=10),
  actionButton("add", "Add scenario"),
  plotOutput("plot"),
)

server <- function(input, output, session) {
  
  v <- reactiveValues(
    results = tibble(Scenario=1, X=1:10, Y=runif(10)),
    scenario1_locked = FALSE # 新增锁标记,初始为未锁定
  )
  
  # 监听滑动条变化,未锁定时更新场景1
  observeEvent(input$samples, {
    if(!v$scenario1_locked){
      v$results <- tibble(Scenario=1, X=1:input$samples, Y=runif(input$samples))
    }
  })
  
  observeEvent(input$add, {
    showModal(modalDialog(footer = modalButton("Close")))
    v$scenario1_locked <- TRUE # 点击按钮后锁定场景1
    newData <- tibble(Scenario=max(v$results$Scenario)+1,X=1:input$samples,Y=runif(input$samples))
    v$results <- v$results %>% bind_rows(newData)
  })
  
  output$plot <- renderPlot({
    v$results %>% ggplot() + geom_line(aes(x=X, y=Y, colour=as.factor(Scenario)))
  })
}

shinyApp(ui, server)

改动说明

  • 新增scenario1_locked响应式标记,初始为FALSE,点击「Add scenario」按钮后设置为TRUE
  • 替换原来无效的input$periods监听,改为监听input$samples,每次滑动条变化时判断如果场景1未锁定,就重新生成场景1的样本数据
  • 点击新增场景按钮时先锁定场景1,之后滑动条改动不会再影响已经生成的所有场景数据,符合原有逻辑

内容的提问来源于stack exchange,提问作者Curious Jorge - user9788072

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:24:04