Я пытаюсь собрать каркас, чтобы Shiny работал асинхронно с набором классов, которые у меня есть, используя фьючерсы и, возможно, обещания.Я собрал тестовый проект с использованием набора внешних модулей, которые имитируют мою реальную настройку.
Примечание. Я также пытался реализовать точно такой же вызов, который вызывает ошибку в этой среде: FutureProcessor.R , и возвращаемая ошибка идентична.
По сути, нажатие кнопки вызывает функцию, которая создает экземпляр класса, который затем выполняет простой расчет.При запуске с первой кнопкой как прямой процесс, это работает нормально.Однако, когда я запускаю его с использованием% <-%, он возвращает следующую ошибку: <code>Warning: Error in getClass: "cTest" is not a defined class
Мне ясно, что я не понимаю это правильно!Однако я не уверен, что то, что я пытаюсь сделать, вообще возможно?
Настройка выглядит следующим образом:
Блестящее приложение:
## Load required libraries
pacman::p_load(shiny, here, promises, future)
setwd(here())
source(here("testing.R"))
source(here("TestClass.R"))
plan(multisession)
# Define UI
ui <- fluidPage(
# Application title
titlePanel("Test external classes"),
# Sidebar
sidebarLayout(
sidebarPanel(
actionButton("clickMe", "I work"),
actionButton("clickMeToo", "I don't work")
),
# Show a text output
mainPanel(
verbatimTextOutput("outputText1"),
verbatimTextOutput("outputText2")
)
)
)
# Define server logic
server <- function(input, output) {
myResult <- NULL
observeEvent(input$clickMe, {
## This works:
myResult <<- testFutures()
output$outputText1 <- renderText({paste0("test: ", myResult$Item3)})
})
observeEvent(input$clickMeToo, {
## This works not:
myResult %<-% {testFutures()}
output$outputText2 <- renderText({paste0("test: ", myResult$Item3)})
})
}
# Run the application
shinyApp(ui = ui, server = server)
Мой тестовый класс:
cTest <- setRefClass("cTest",
fields=list(
Item1="numeric",
Item2="numeric",
Item3= "numeric"),
methods = list(
Reset = function() {
Item1 <<- 0
Item2 <<- 0
Item3 <<- 0
},
AddUp = function() {
Item3 <<- Item1 + Item2
}
)
Моя тестовая функция:
testFutures <- function() {
output <- new ("cTest")
output$Reset()
output$Item1 <- 3
output$Item2 <- 4
output$AddUp()
return(output)
}