【发布时间】:2014-11-28 19:28:11
【问题描述】:
我正在使用 R Studio 的 Shiny 构建一个动画图形项目。目前的“Go!”按钮启动动画。我想让“重置”按钮重新初始化变量并重新运行动画,但由于 Shiny 不允许对 input$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?
}
})
})
【问题讨论】: