相关疑难解决方法(0)

交互式R中的异步命令调度

我想知道是否可以使用其中一个并行处理后端(可能不是)R.我尝试了一些谷歌搜索,没有任何结果.

我目前遇到的一般问题:

  • 我有一些大型物体需要大约半小时到达 load
  • 我想在数据上生成一系列图表(需要几分钟).
  • 我想在发生这种情况时继续对数据做其他事情(尽管不改变基础数据!)

理想情况下,我可以从交互式会话中调度命令,而不必等待它返回(所以我可以在等待渲染时继续做其他事情).这是可能的,还是这是一厢情愿的想法?

parallel-processing asynchronous r

6
推荐指数
2
解决办法
656
查看次数

按钮点击闪亮时停止耗时的功能

如果我问一个非常基本的问题,我会提前道歉.我是R和Shiny的新手,我无法在任何地方找到解决这个问题的方法.

在这里,我有一个非常基本的shinyApp,在ui.R中有两个按钮,Start按钮将调用一个循环运行的函数,并在屏幕上显示一些东西.我有一个停止按钮,应该能够终止此循环.

我无法获得终止无限循环的停止按钮,任何想法?

以下是我试过的.如果我做错了,请原谅我

#ui.R
library(shiny)

shinyUI(fluidPage(
    actionButton("startSearch", label = "Start Search"),
    actionButton("stopSearch",  label = "Stop Search")
))

#server.R
library(shiny)

shinyServer(function(input, output, session){

  initial.stop <- 0
  observeEvent(input$startSearch,
   {
     while(TRUE) 
     {
       Sys.sleep(1)
       if (initial.stop < input$stopSearch) 
       {
         print('break')
         stop('error')
       }
       print("Infinite loop")
     }
   })
})
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为R是单线程的,而应用程序没有响应,因为它陷入无限循环.实际上,我们在for循环中运行了大量耗时的计算,我们需要在用户单击停止时在当前迭代之后停止计算.

有没有办法解决这个问题?任何建议都会有所帮助.谢谢

r infinite-loop shiny

6
推荐指数
0
解决办法
273
查看次数

在后台进程中计算输出时如何显示加载屏幕?

这个问题是这个问题的连续性:是否有可能停止执行shiny内部的R代码(而不停止shiny进程)?

我在应用程序中显示的绘图需要一些时间才能生成,我希望用户能够停止其创建(例如,如果他们在选项中犯了错误)。我发现这篇关于在 Shiny 中使用的博客文章callr。工作流程如下:

  • 创建一个空的作业/地块列表
  • 单击“开始”创建一个后台进程来创建绘图
    • 如果用户不执行任何操作,则绘图将在后台计算。我invalidateLater()每一秒都检查后台进程是否完成。如果是,那么我将显示该图。
    • 如果用户在进程结束之前单击“停止”,则该进程将被终止,从列表中删除,并显示上一个绘图(如果之前没有生成任何绘图,则不会显示任何内容)

首先,我不确定当几个人同时使用该应用程序时,这会如何扩展。由于每个后台进程都是独立的,因此我认为一个用户不会阻止其他进程,但我可能是错的。

其次,我想在绘图上显示一个等待指示器。到目前为止,我使用该包waiter来做到这一点,但这里的问题是renderPlot()每秒都会失效以检查后台进程是否完成。因此,waiter当输出无效时, 会反复出现和消失。

下面是一个示例应用程序,它模仿了我想要的行为:

library(shiny)
library(uuid)
library(ggplot2)
library(waiter)

ui <- fluidPage(
  useWaiter(),
  titlePanel("Test background job"),
  actionButton("start","Start Job"),
  actionButton("stop", "Stop job"),
  plotOutput("plot")
)

# the toy example job
slow_func <- function(var){
  library(ggplot2)
  Sys.sleep(5)
  ggplot(mtcars, aes(drat, !!sym(var))) + 
    geom_point()
}

server <- function(input, output, session) {
  
  w <- Waiter$new(id = "plot")

  token <- reactiveValues(var = NULL, id = NULL, last_id = …
Run Code Online (Sandbox Code Playgroud)

r shiny

6
推荐指数
1
解决办法
522
查看次数