Мой скрипт R очень изменчив, поэтому я разбил его на ряд исходных() - ed R файлов, которые запускаются с помощью скрипта контроллера. Если я хочу, чтобы скрипт запускался, я создаю объект и завершаю скрипты source() - ed условным выражением. Я хочу использовать программируемые виджеты для управления входами, но я также хочу иметь возможность запускать код через RStudio. Чтобы запустить его в R, я создал сценарий Rlauncher, где вы можете вручную задать параметры объекта и source() скрипт контроллера. К сожалению, с SHINYlauncher (server.R), завернутый actionButton(), необходимый для изоляции всех входов и запуска скрипта, требует, чтобы код работал в gliny's .GlobalEnv. Я придумал частичное решение для запуска сервера. R параллельно исходному сценарию, но я не могу обойти источник() - скрипт контроллера в .GlobalEnv. Любая помощь в том, как munipulate среды запускать скрипт контроллера в parent.frame(), будет потрясающе!Shiny - Как кодировать параллельную обработку для сценариев source() - ed внутри кнопки действия?
Это мой первоначальный код. Если я загружаю свои объекты на .GlobalEnv при запуске сценария контроллера, все работает, но он берет меня НЕДЕЛИ, чтобы сделать партию карт ...
shinyServer(function(input, output, session) {
observe({
if (input$actnBut_runController==0) {return} else{
isolate({
tmp.env <- new.env()
run_script1 <- input$run_script1
run_script2 <- input$run_script2
run_script3 <- input$run_script3
assign("run_script1",run_script1,envir=tmp.env)
assign("run_script2",run_script2,envir=tmp.env)
assign("run_script3",run_script3,envir=tmp.env)
save(list=ls(all.names=TRUE,pos=tmp.env),envir=tmp.env,file="obs.RData")
rm(tmp.env)
})
print("Running sourced scripts...")
source("controller.R"),echo=TRUE)
}
})
Этого код имитирует параллельные кодирования я видел от других рабочие примеры. Он создаст объекты и запустит скрипт контроллера, но я все еще не могу заставить его запускаться в parent.frame().
shinyServer(function(input, output, session) {
iso_obs <- function() {
Sys.sleep(1)
shiny::isolate({
tmp.env <- new.env()
run_script1 <- input$run_script1
run_script2 <- input$run_script2
run_script3 <- input$run_script3
assign("run_script1",run_script1,envir=tmp.env)
assign("run_script2",run_script2,envir=tmp.env)
assign("run_script3",run_script3,envir=tmp.env)
save(list=ls(all.names=TRUE,pos=tmp.env),envir=tmp.env,file="obs.RData")
rm(tmp.env)
})}
runController <- reactive({
if (input$actnBut_runController==0) {return} else {
iso_obs()
print("Running sourced scripts...")
source("controller.R"),echo=TRUE)
}})
Этот код также создает объекты, но неправильно запускает скрипт контроллера. Я попытался выполнить две функции для одного и того же ввода, где исходный() - код - это функция с задержкой.
shinyServer(function(input, output, session) {
observe({
if (input$actnBut_runController==0) {return} else{
isolate({
tmp.env <- new.env()
run_script1 <- input$run_script1
run_script2 <- input$run_script2
run_script3 <- input$run_script3
assign("run_script1",run_script1,envir=tmp.env)
assign("run_script2",run_script2,envir=tmp.env)
assign("run_script3",run_script3,envir=tmp.env)
save(list=ls(all.names=TRUE,pos=tmp.env),envir=tmp.env,file="obs.RData")
rm(tmp.env)
})
}
})
runController <- reactive({
if (input$actnBut_runController==0) {return} else {
Sys.sleep(1) # This is to delay the R environment so .GlobalEnv can create objects
print("Running sourced scripts...")
source("controller.R"),echo=TRUE)
}
})
Используйте функции с аргументами вместо сценариев источников, которые используют глобальные переменные. – hadley