是否可以预先计算ggplot直方图的值?计算一些直方图确实减慢了我的ShinyR应用程序,因此我想找到一种缓存直方图的方法,因此它们只针对给定的一组参数计算一次。我检查了docs,但没有看到任何相关信息。抱歉,如果我错过了什么,但是有人可以指出我有关如何做到这一点的文件,或者告诉我它不可能吗?
答案 0 :(得分:2)
你可以这样做:
library(shiny)
library(ggplot2)
n <- 400
server <- function(input, output) {
cachedData <<- list()
datasetInput <- reactive({
switch(input$dataset,
"data1" = list("name"="dataset1", "data"=data.frame("x"=runif(n),"y"=runif(n)), "plot"=NULL),
"data2" = list("name"="dataset2", "data"=data.frame("x"=runif(n),"y"=runif(n)), "plot"=NULL),
"data3" = list("name"="dataset3", "data"=data.frame("x"=runif(n),"y"=runif(n)), "plot"=NULL))
})
observeEvent(input$run,{
d <- datasetInput()
# If dataset cached
if ( d$name %in% names(cachedData) ){
}
# Else cache dataset
else{
cachedData[[d$name]] <<- d
}
# See if data is loaded
if ( is.null( cachedData[[d$name]]$plot ) ){
print("Creating Plot")
cachedData[[d$name]]$plot <<- ggplot(data=d$data,aes(x=x)) + geom_histogram(stat="bin")
}
else{
print("Loading plot")
}
# Else save data
output$plot <- renderPlot({ cachedData[[d$name]]$plot})
})
}
ui <- shinyUI(fluidPage(
selectInput("dataset", "Choose a dataset:",
choices = c("data1", "data2", "data3")),
plotOutput("plot"),
actionButton('run','Generate Plot')
)
)
shinyApp(ui = ui, server = server)
然后可以使用load
和save
函数加载和保存cachedData列表。