さまざまな入力を使っていくつかの光沢のあるアプリを開発しています。一般的には、入力値を受け入れるためにボタンを押して、設定する必要があるオブジェクトを作成する設定があります。シミュレーションは、ユーザーがアニメーションのsliderInputオブジェクトの再生ボタンを押したときに実行されます。作成されたオブジェクトは、繰り返しごとに更新されます。R shiny:reactiveValuesオブジェクトの値を変更する方法
1つの問題は、オブジェクトの1つがreactiveValuesリストであることです。ユーザーが設定を変更して「同意する」をクリックして実行するたびに、オブジェクト全体を再作成(初期値の消去)したいと思います。代わりに、reactiveValuesリスト内のオブジェクトは上書きされませんが、毎回次の設定で拡張されています。したがって、各オブジェクトスロットは実際には複数のオブジェクトを保持します。
これを確認するには、反復の最大値を値に設定し、受け入れを押してから値を変更して再度受け入れてから、再生をクリックしてみてください。あなたはそれが異なった長さのreactiveValuesオブジェクトをプリントアウトするのを見るでしょう。
rm()のようないくつかの試みを試みて、reactiveValuesを削除しようとしました。また、私はここで解決策を試しましたが(shiny: How to update a reactiveValues object?)、どちらもうまくいきませんでした。
library(shiny)
iter_test <- shinyApp(
ui=shinyUI(fluidPage(
titlePanel("title panel"),
sidebarLayout(position = "left",
sidebarPanel("Simulation parameters",
sliderInput("iter","Progress of simulation",value=1, min=1, max=30, round=TRUE, step=1,
animate=animationOptions(interval=1, loop=FALSE)),
actionButton('run',"Accept settings, press play above"),
sliderInput('max_iter','Maximum number of iterations',value=20, min=1, max=30, round=TRUE, step=1)
),
mainPanel( plotOutput("plots"))
)#end of layout
)
)#end of UI definition
,
server=shinyServer(function(input, output, session)
{
observeEvent(input$run, {
#only set up simulation objects if accept is clicked
updateSliderInput(session, "iter", label="Progress of simulation", value=1, min=1, max=input$max_iter, step=1)
#try(rm(params))
#set up objects needed for simulation
params <- reactiveValues(tmp=rep(1, input$max_iter))
#when the play button is pressed, the following loop should trigger.
observeEvent(input$iter, {
print(length(params$tmp))
})
})
}
)
)
私はあなたと一緒に働くことができると思うが、私は本当にあなたがこれで行くのか分からないので、完全にはわからない。 –