在R Studio中重置动画

在R Studio中重置动画,r,animation,shiny,reset,R,Animation,Shiny,Reset,我正在使用R Studio的Shining构建一个动画图形项目。当前,“Go!”按钮启动动画。我想让“重置”按钮重新初始化变量并重新运行动画,但由于Shiny不允许对输入的$button值进行代码内更改,因此我一直在讨论如何执行此操作。真正的项目在形式上与下面的示例块相似,但要复杂得多。动画是所传达信息的组成部分。项目完成后,我打算将其部署到Shiny服务器上,因此我希望用户能够使用不同的选择重新运行动画,而无需重新打开链接 # ui.R library(shiny) shinyUI

我正在使用R Studio的Shining构建一个动画图形项目。当前,“Go!”按钮启动动画。我想让“重置”按钮重新初始化变量并重新运行动画,但由于Shiny不允许对输入的$button值进行代码内更改,因此我一直在讨论如何执行此操作。真正的项目在形式上与下面的示例块相似,但要复杂得多。动画是所传达信息的组成部分。项目完成后,我打算将其部署到Shiny服务器上,因此我希望用户能够使用不同的选择重新运行动画,而无需重新打开链接

    #  ui.R
library(shiny)

shinyUI(fluidPage(

  # Application title
  headerPanel("Cost Explorer"),


  sidebarPanel(
    actionButton("goButton", "Go!"),
    actionButton("reset", "Reset"),

    sliderInput("myvar", label=h6("Variability of cost"),
                min=0, max=50, value=10)   
  ),

  mainPanel(

    plotOutput(outputId="tsplot")

  )
))

    # server.R
library(shiny)

shinyServer(function(input, output, session) {

  # initialize reactive values
  ts <- reactiveValues(cost=rep(NA,100), year=(2010:2109), counter=1)

  output$tsplot <- renderPlot({
    plot(ts$year, ts$cost, xlim=c(2010,2110), ylim=c(-200,200), xlab="Year",
         ylab="Cost (US Dollars)", type="l", main="Forecasted Cost Time series")
  })

  observe({

    isolate({


        if (ts$counter==1){
          ts$cost[ts$counter]=50 #initial cost
        }
        if (ts$counter > 1){
          ts$cost[ts$counter]=ts$cost[ts$counter-1]+rnorm(1,0,input$myvar)
        }
        ts$counter=ts$counter+1

    })

    if (((isolate(ts$counter) < 100)) & (input$goButton > 0)){
      invalidateLater(200, session)
    }
    if (input$reset > 0){
      # How do I add reset functionality?

    }
  }) 
})
#ui.R
图书馆(闪亮)
shinyUI(fluidPage)(
#申请名称
headerPanel(“成本探索者”),
侧栏面板(
动作按钮(“goButton”,“Go!”),
操作按钮(“重置”、“重置”),
滑块输入(“myvar”,标签=h6(“成本的可变性”),
最小值=0,最大值=50,值=10)
),
主面板(
plotOutput(outputId=“tsplot”)
)
))
#服务器.R
图书馆(闪亮)
shinyServer(功能(输入、输出、会话){
#初始化反应值
(表0){
失效者(200,会话)
}
如果(输入$reset>0){
#如何添加重置功能?
}
}) 
})

根据您的应用程序,添加另一个
观察
并使用全局赋值操作符将计数器重置为1会更快
rm(list = ls())
library(shiny)

ui <- (fluidPage(
  # Application title
  headerPanel("Cost Explorer"),

  sidebarPanel(
    actionButton("goButton", "Go!"),
    actionButton("reset", "Reset"),
    sliderInput("myvar", label=h6("Variability of cost"),min=0, max=50, value=10)   
  ),
  mainPanel(plotOutput(outputId="tsplot"))
))

server <- (function(input, output, session) {

  # initialize reactive values
  ts <- reactiveValues(cost=rep(NA,100), year=(2010:2109), counter=1)

  output$tsplot <- renderPlot({
    plot(ts$year[1:ts$counter], ts$cost[1:ts$counter], xlim=c(2010,2110), ylim=c(-200,200), xlab="Year",
         ylab="Cost (US Dollars)", type="l", main="Forecasted Cost Time series")
  })

  observe({
    isolate({
      if (ts$counter==1){
        ts$cost[ts$counter]=50 #initial cost
      }
      if (ts$counter > 1){
        ts$cost[ts$counter]=ts$cost[ts$counter-1]+rnorm(1,0,input$myvar)
      }
      ts$counter=ts$counter+1    
    })
    if (((isolate(ts$counter) < 100)) & (input$goButton > 0)){
      invalidateLater(200, session)
    }

  })

  observe({
    if (input$reset > 0){
      ts$counter <<- 1
    }
  })
})

runApp(list(ui = ui, server = server))