在下面的MWE代码中,我希望改变滑块输入的场景数量,以响应第一次呈现的场景1(在单击“添加场景”操作按钮之前)。一旦通过单击操作按钮(场景2、3等)添加了另一个场景,场景1将保持在改变滑块输入时的位置。底部显示的图像应该更好地解释:
(顺便说一句,不要担心这个动作按钮会触发一个空白的模态对话框--我以后需要它)。
有人能帮助使滑块输入响应到场景1吗?
请注意,按照当前的工作方式,当单击“添加场景”时,场景的先前滑块输入将正确运行"gel“(不要更改)。
MWE代码:
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)
发布于 2021-10-12 04:06:48
看看这个有用不管用。理想情况下,您应该使用map_dfr或类似的函数来生成tibble。但是为了使代码易于理解,我只使用了for循环。
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)
https://stackoverflow.com/questions/69521563
复制相似问题