首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R闪亮中,如何实现一个反应函数?

在R闪亮中,如何实现一个反应函数?
EN

Stack Overflow用户
提问于 2021-10-11 05:47:58
回答 1查看 111关注 0票数 0

在下面的MWE代码中,我希望改变滑块输入的场景数量,以响应第一次呈现的场景1(在单击“添加场景”操作按钮之前)。一旦通过单击操作按钮(场景2、3等)添加了另一个场景,场景1将保持在改变滑块输入时的位置。底部显示的图像应该更好地解释:

  • 图像1:第一次调用应用程序时的默认视图。场景1是自动生成的,10个随机样本(在x轴上绘制的样本数,y轴上的随机数)。10是样本数的默认值。
  • 图像2:下一步:我将输入滑块移动到6(没有接触动作按钮),场景1保持在10个示例中。我希望场景1对6个示例(而不是默认的10)进行积极的重新运行。
  • 映像3:下面的步骤:当单击“添加场景”操作按钮时,展示所有其他示例的工作方式。我移动滑块,并根据输入滑块的值生成新的场景。

(顺便说一句,不要担心这个动作按钮会触发一个空白的模态对话框--我以后需要它)。

有人能帮助使滑块输入响应到场景1吗?

请注意,按照当前的工作方式,当单击“添加场景”时,场景的先前滑块输入将正确运行"gel“(不要更改)。

MWE代码:

代码语言:javascript
运行
复制
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)))
  
  observeEvent(req(input$periods), {
    v <- reactiveValues(results=tibble(Scenario=1,X=1:input$samples,Y=input$samples))
  })
  
  observeEvent(input$add, {showModal(modalDialog(footer = modalButton("Close")))
    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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-12 04:06:48

看看这个有用不管用。理想情况下,您应该使用map_dfr或类似的函数来生成tibble。但是为了使代码易于理解,我只使用了for循环。

代码语言:javascript
运行
复制
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) {
  
  numScenarios <- reactiveValues(numS=1)
  
  observeEvent(input$add, {showModal(modalDialog(footer = modalButton("Close")))
    numScenarios$numS <- (numScenarios$numS+1)
  })
  
  output$plot <- renderPlot({
    v <- tibble()
    for (i in 1: numScenarios$numS){
      results=tibble(Scenario=i,X=1:input$samples,Y=runif(input$samples))
      v <- bind_rows(v, results)
    }
    v %>% ggplot() + geom_line(aes(x=X, y=Y, colour=as.factor(Scenario)))
  })
}

shinyApp(ui, server)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69521563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档