2015-07-21 109 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,並有反應監聽器檢測時,這些計算完成。

編輯:閃亮也將需要權限寫入相關位置。