use*_*781 5 animation r reset shiny
我正在使用R Studio的Shiny构建一个动画图形项目.目前"去!" 按钮启动动画.我想让"重置"按钮重新初始化变量并重新运行动画,但由于Shiny不允许对输入$按钮值进行代码内更改,因此我不知道如何执行此操作.真实的项目在形式上与下面的样本块类似,但涉及的更多.动画是传达信息的组成部分.当项目完成后,我打算将它部署在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?
}
})
})
Run Code Online (Sandbox Code Playgroud)
observe根据您的应用程序,使用全局赋值运算符添加另一个并将计数器重置为 1会更快<<-。我还更改了绘图,因此它绘制了索引变量。看看人们遇到的类似问题,在这里。注意:在我的一些应用程序中,当用户按两次开始按钮时,我也有暂停按钮,您可以通过检查按钮索引是否可被 2 整除来实现此目的,因为每次单击按钮时,它都会增加 1。
我正在进一步研究您的应用程序,确保您正在垃圾收集未引用的观察者,因为您可能会耗尽内存(通过任务管理器查看内存配置文件)。在这里查看这个示例,或者您可以为每个会话设置注销功能,客户端将在n分钟后注销。
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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1669 次 |
| 最近记录: |