How to cache data in shiny server?

橙三吉。 提交于 2019-12-06 03:57:21

问题


I am using R to deploy an app over the web but the url from which my app takes data is where my app takes time so is there a way where i can cache that data? Because i tried to install the packages memoise,R.cache and a few more that were all unsupported by the server


回答1:


I recommend trying the DataCache package by Jason Bryer. The package is available through GitHub and I was successful in using it today for a Shiny app that I am developing.

The main function from that package is data.cache. You will need to a define a function that generates a list of objects that you want to cache, and then pass the function you define as an argument to data.cache. I also recommend setting the cache.name parameter of data.cache if you intend on caching more than one list of objects in your application.

For example:

DataCache::data.cache(
  function(){
    list(
      normal_random_numbers = rnorm(10),
      uniform_random_numbers = runif(10)
    )
  },
  cache.name = 'my_random_numbers'
)

The above code creates two objects in the local environment, normal_random_numbers and uniform_random_numbers, as well as caches these to the file system. When you run this code again, the cached copies of these objects will be used rather than being regenerated - unless of course the cache expires. The frequency parameter of data.cache is used to set the expiry of the cache, which is set to daily by default.

If you are running the application under Windows then use this slightly modified version of the package. This is to address--- a bug that is apparently due to the cache filename being incompatible with the Windows file system.




回答2:


This article from Rstudio is quite exhaustive and walks you through different ways to achieve that (i.e diskcache, the storr package or a Redis instance).

The main logic revolves around rendering a cached element and setting up the logic for cache invalidation:

function(input, output) {
  renderCachedPlot(
    {
      # Code for a beautiful plot
    },
    # A change in the input or the dataframe will invalidate the cache
    cacheKeyExpr = list({ input$n, df() }) 
  )
}


来源:https://stackoverflow.com/questions/36026881/how-to-cache-data-in-shiny-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!