gpt4 book ai didi

r - 与 R Shiny App 的自动化交互

转载 作者:行者123 更新时间:2023-12-04 18:41:16 27 4
gpt4 key购买 nike

我正在尝试自动化 Shiny 应用程序的交互,以便它显示一系列结果,同时通过预定范围的输入递增,而不必重复计算和更改输入值。这种自动化将提供一组输入的系统 View ,例如所选股票的刷新价格图表显示,或正在监控的实时流程的当前绩效指标图。

这类似于问题 [Update graph/plot with fixed interval of time] ( Update graph/plot with fixed interval of time ),它使用计时器运行循环。扩展这种方法,我的目标是: a) 自动将 invalidateLater 暂停设置为高(1 小时)以在固定的 (5) 组显示后有效地停止循环,等待新用户输入以重新启动它。

b) [当我可以做到这一点时,我将添加一个基于计数器的控件以在它停止之前循环通过一组输入 $obs。为简单起见,此处省略了具有相同错误和可能相同解决方案的该步骤。]

使用上面引用的玩具示例,以下脚本确实会重复循环其 5 个显示,但它会产生此错误而不是更改暂停间隔。

监听8100端口hist.default(dist, main = paste("Last Histogram count =", as.numeric(updater())), 错误: 'x' 必须是数字

as.numeric(autoControl()) Error: could not find function "autoControl"

我找不到此任务所需的 react 导体、 react 值或其他方法。感谢您的帮助。

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())))
}
})
}
))

最佳答案

你得到这个错误是因为 hist 分布是在 if 子句中定义的,但是你在 else 子句中使用它(在 5 个间隔之后),它在哪里没有定义。这就是为什么它适用于前 5 个间隔。

   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())))
}

在我将 dist 移动到 if 条件之前后,我让你的自行车开始工作。 (我还将您的代码拆分为 UI.R 和 server.R 以使其更易于管理。)这里不粘贴,因为它们本质上是相同的代码,但您可以在此 gist 中找到代码的工作版本。 .

关于r - 与 R Shiny App 的自动化交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18622100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com