我在想這一點,我認爲這是可能的,但我心目中的實現是特定於平臺。在這種情況下,我將假設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,並有反應監聽器檢測時,這些計算完成。
編輯:閃亮也將需要權限寫入相關位置。