我在想这一点,我认为这是可能的,但我心目中的实现是特定于平台。在这种情况下,我将假设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,并有反应监听器检测时,这些计算完成。
编辑:闪亮也将需要权限写入相关位置。