Czy można pobierać obiekty w kolorze błyszczącym bez konieczności tworzenia oddzielnej, redundantnej instancji tego obiektu w ramach wywołania downloadHandler()
? Na przykład, rozważmy następujący przykład:Pobieranie obiektów reaktywnych w kolorze błyszczącym
ui.R
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Simple Example"),
sidebarPanel(
textInput("options","Enter some content:",""),
submitButton("Go")
),
mainPanel(
tableOutput("dataTable"),
downloadButton('downloadData','Save Data as CSV File')
)
))
server.R
library(shiny)
shinyServer(function(input, output) {
makeQuery <- reactive({
if(input$options == ""){
return("Enter some options")
}
else {
return(input$options)
}
})
runQuery <- function(query){
dat <- data.frame(v1=rep(query,5))
return(dat)
}
output$dataTable <- renderTable({
query <- makeQuery()
if(grepl("^Enter",query)){
return(data.frame(Error=query))
} else {
return(runQuery(query))
}
},include.rownames=FALSE)
output$downloadData <- downloadHandler(
filename = c('data.csv'),
content = function(file) {
write.csv(runQuery(makeQuery()), file)
}
)
})
Problem mam z powyższym przykładzie jest to, że używam runQuery()
w terminie zarówno renderTable()
i połączenia downloadHandler()
. W tym przykładzie nie ma żadnego dodatkowego obciążenia, ale na moim prawdziwym przykładzie wymaga to uruchomienia procesu trwającego 5-10 minut, więc wywołanie go dwa razy, gdy ktoś pobierze dane, jest niezwykle nieefektywne.
Czy istnieje możliwość obejścia tego problemu przez odwołanie się do już utworzonego obiektu w wywołaniu downloadHandler()
lub innej pracy?
Czy można w ogóle zapytać o przyspieszenie? 'data.table' lub coś takiego? Nie sądzę, że problem jest z obsługą pobierania, jeśli twoje zapytania trwają tak długo. – intra
Niestety nie - to kwerenda z gałęzi do bazy danych. – David