2015-07-21 128 views
6

我想知道它是否能够保持连续后台任务同时运行的应用程序有光泽。这意味着,例如,在shinyApp正在运行时,“线程”可能将数据从网页下载到数据库。[R闪亮 - 连续后台任务

更重要的是,是否可以与来自外部背景“线程”的数据进行交互? (例如,当它正在下载,制作一个情节或某物)。

在视频教程,有人说:“代码服务器功能外将每R对话(工人)一次运行”。所以,我认为我需要的代码应放在服务器功能之外。

是有可能实现的现场我形容?或者我需要另一个外部R实例(在shinyApp脚本之外)?

在此先感谢。

回答

1

我在想这一点,我认为这是可能的,但我心目中的实现是特定于平台。在这种情况下,我将假设Ubuntu 14.04。

比方说你有一些计算密集型任务:

ui.R:

library(shiny) 
fluidPage(
    numericInput('number','Number',10000000), 
    textOutput('CalcOutput') 
) 

server.R

library(shiny) 
function(input,output,session) { 
    output$CalcOutput <- renderText({ 
    sort(runif(input$number)) 
    }) 
} 

操作迁移到相关变量的一个函数子文件:

newfile.R

saveRDS(sort(runif(commandArgs(TRUE)[1])), file = 'LargeComputationOutput') 

改变你的server.R

function(input, output) { 
    observe({ 
    # Starts script as a background process, but completes instantaneously 
    system(paste('Rscript newfile.R',input$number,'&')) 
    }) 

    CalculationOutput <- reactive({ 
    invalidateLater(5000) 
    validate(
     need(file.exists('LargeComputationOutput'),'Calculation In Progress'), 
     need(file.info('LargeComputationOutput')$mtime > Sys.time()-5,'Calculation In Progress') 
    ) 
    x <- readRDS('LargeComputationOutput') 
    }) 

    output$CalcOutput <- renderText({ 
    CalculationOutput()[300] 
    }) 


} 

这仍然是一个小马车,但它的概念验证,使您可以移动密集型业务子rprocesses,并有反应监听器检测时,这些计算完成。

编辑:闪亮也将需要权限写入相关位置。