入力値を繰り返しカウントして変更することなく、所定の範囲の入力をインクリメントしながら一連の結果を表示するように、Shiny アプリの対話を自動化しようとしています。この自動化により、選択した銘柄の更新された価格チャートの表示や、監視されているリアルタイム プロセスの現在のパフォーマンス インジケーターのプロットなど、一連の入力の体系的なビューが提供されます。
これは、タイマーでループを実行する質問 [一定間隔でグラフ/プロットを更新する] (一定間隔でグラフ/プロットを更新する ) に似ています。そのアプローチを拡張して、私の目的は次のとおりです。a) 無効化後の一時停止を自動的に高く (1 時間) 設定して、固定 (5) セットの表示の後にサイクルを効果的に停止し、新しいユーザー入力を保留して再起動します。
b) [それができるようになったら、停止する前に一連の input$obs を循環するカウンター ベースのコントロールを追加します。簡単にするために、同じエラーとおそらく同じ解決策を持つそのステップはここでは省略されています。]
上記のおもちゃの例を使用すると、次のスクリプトは 5 つの表示を繰り返し循環しますが、一時停止間隔を変更するのではなく、このエラーが発生します。
ポート 8100 でリッスンする hist.default(dist, main = paste("Last Histogram count =", as.numeric(updater())) のエラー: 'x' は数値でなければなりません
as.numeric(autoControl()) エラー: 関数 "autoControl" が見つかりませんでした
このタスクに必要なリアクティブ コンダクター、reactiveValues、またはその他のメソッドが見つかりません。ご協力ありがとうございました。
library(shiny)
updates <- 0
updater <- function(){ updates + 1 }
runApp(list(
ui = pageWithSidebar(
headerPanel("Hello Shiny!"),
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 50)
,
selectInput(inputId = "secPause",
label = "Seconds between displays:",
choices = c(1, 2, 3, 60*60),
selected = 2)
),
mainPanel(
plotOutput("distPlot")
)
),
server =function(input, output, session) {
updateTracker <- reactive( {
invalidateLater(as.numeric(input$secPause) * 1000, session)
updates <<- as.numeric(updater())
})
autoControl <- reactive( {
if(updateTracker() <= 5)
secPause <<- input$secPause
else
secPause <<- 60*60
return(secPause)
})
output$distPlot <- renderPlot( {
if(updateTracker() <= 5) {
# generate an rnorm distribution and plot it
dist <- rnorm(input$obs)
hist(dist, main = paste("Histogram count =" , updateTracker()))
}
else {
updates <<- 0
hist(dist, main = paste("Last Histogram count =",
as.numeric(updater()), "with secPause =",
as.numeric(autoControl())))
}
})
}
))