mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-10 15:38:19 -05:00
342 lines
38 KiB
HTML
342 lines
38 KiB
HTML
<!DOCTYPE html>
|
|
<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Plot output with cached images — renderCachedPlot • shiny</title><!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script><!-- Bootstrap --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous"><script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script><!-- bootstrap-toc --><link rel="stylesheet" href="../bootstrap-toc.css"><script src="../bootstrap-toc.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- pkgdown --><link href="../pkgdown.css" rel="stylesheet"><script src="../pkgdown.js"></script><meta property="og:title" content="Plot output with cached images — renderCachedPlot"><meta property="og:description" content="Renders a reactive plot, with plot images cached to disk. As of Shiny 1.6.0,
|
|
this is a shortcut for using bindCache() with renderPlot()."><meta property="og:image" content="/logo.png"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
|
|
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
|
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
|
<![endif]--></head><body data-spy="scroll" data-target="#toc">
|
|
|
|
|
|
<div class="container template-reference-topic">
|
|
<header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
|
<div class="container">
|
|
<div class="navbar-header">
|
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
|
|
<span class="sr-only">Toggle navigation</span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
</button>
|
|
<span class="navbar-brand">
|
|
<a class="navbar-link" href="../index.html">shiny</a>
|
|
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">1.12.0.9000</span>
|
|
</span>
|
|
</div>
|
|
|
|
<div id="navbar" class="navbar-collapse collapse">
|
|
<ul class="nav navbar-nav"><li>
|
|
<a href="../reference/index.html">Reference</a>
|
|
</li>
|
|
<li>
|
|
<a href="../news/index.html">Changelog</a>
|
|
</li>
|
|
</ul><ul class="nav navbar-nav navbar-right"><li>
|
|
<a href="https://github.com/rstudio/shiny/" class="external-link">
|
|
<span class="fab fa-github fa-lg"></span>
|
|
|
|
</a>
|
|
</li>
|
|
</ul></div><!--/.nav-collapse -->
|
|
</div><!--/.container -->
|
|
</div><!--/.navbar -->
|
|
|
|
|
|
|
|
</header><div class="row">
|
|
<div class="col-md-9 contents">
|
|
<div class="page-header">
|
|
<h1>Plot output with cached images</h1>
|
|
<small class="dont-index">Source: <a href="https://github.com/rstudio/shiny/blob/rc-v1.12.1/R/render-cached-plot.R" class="external-link"><code>R/render-cached-plot.R</code></a></small>
|
|
<div class="hidden name"><code>renderCachedPlot.Rd</code></div>
|
|
</div>
|
|
|
|
<div class="ref-description">
|
|
<p>Renders a reactive plot, with plot images cached to disk. As of Shiny 1.6.0,
|
|
this is a shortcut for using <code><a href="bindCache.html">bindCache()</a></code> with <code><a href="renderPlot.html">renderPlot()</a></code>.</p>
|
|
</div>
|
|
|
|
<div id="ref-usage">
|
|
<div class="sourceCode"><pre class="sourceCode r"><code><span><span class="fu">renderCachedPlot</span><span class="op">(</span></span>
|
|
<span> <span class="va">expr</span>,</span>
|
|
<span> <span class="va">cacheKeyExpr</span>,</span>
|
|
<span> sizePolicy <span class="op">=</span> <span class="fu"><a href="sizeGrowthRatio.html">sizeGrowthRatio</a></span><span class="op">(</span>width <span class="op">=</span> <span class="fl">400</span>, height <span class="op">=</span> <span class="fl">400</span>, growthRate <span class="op">=</span> <span class="fl">1.2</span><span class="op">)</span>,</span>
|
|
<span> res <span class="op">=</span> <span class="fl">72</span>,</span>
|
|
<span> cache <span class="op">=</span> <span class="st">"app"</span>,</span>
|
|
<span> <span class="va">...</span>,</span>
|
|
<span> alt <span class="op">=</span> <span class="st">"Plot object"</span>,</span>
|
|
<span> outputArgs <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/list.html" class="external-link">list</a></span><span class="op">(</span><span class="op">)</span>,</span>
|
|
<span> width <span class="op">=</span> <span class="cn">NULL</span>,</span>
|
|
<span> height <span class="op">=</span> <span class="cn">NULL</span></span>
|
|
<span><span class="op">)</span></span></code></pre></div>
|
|
</div>
|
|
|
|
<div id="arguments">
|
|
<h2>Arguments</h2>
|
|
|
|
|
|
<dl><dt id="arg-expr">expr<a class="anchor" aria-label="anchor" href="#arg-expr"></a></dt>
|
|
<dd><p>An expression that generates a plot.</p></dd>
|
|
|
|
|
|
<dt id="arg-cachekeyexpr">cacheKeyExpr<a class="anchor" aria-label="anchor" href="#arg-cachekeyexpr"></a></dt>
|
|
<dd><p>An expression that returns a cache key. This key should
|
|
be a unique identifier for a plot: the assumption is that if the cache key
|
|
is the same, then the plot will be the same.</p></dd>
|
|
|
|
|
|
<dt id="arg-sizepolicy">sizePolicy<a class="anchor" aria-label="anchor" href="#arg-sizepolicy"></a></dt>
|
|
<dd><p>A function that takes two arguments, <code>width</code> and
|
|
<code>height</code>, and returns a list with <code>width</code> and <code>height</code>. The
|
|
purpose is to round the actual pixel dimensions from the browser to some
|
|
other dimensions, so that this will not generate and cache images of every
|
|
possible pixel dimension. See <code><a href="sizeGrowthRatio.html">sizeGrowthRatio()</a></code> for more
|
|
information on the default sizing policy.</p></dd>
|
|
|
|
|
|
<dt id="arg-res">res<a class="anchor" aria-label="anchor" href="#arg-res"></a></dt>
|
|
<dd><p>The resolution of the PNG, in pixels per inch.</p></dd>
|
|
|
|
|
|
<dt id="arg-cache">cache<a class="anchor" aria-label="anchor" href="#arg-cache"></a></dt>
|
|
<dd><p>The scope of the cache, or a cache object. This can be <code>"app"</code>
|
|
(the default), <code>"session"</code>, or a cache object like a
|
|
<code><a href="https://cachem.r-lib.org/reference/cache_disk.html" class="external-link">cachem::cache_disk()</a></code>. See the Cache Scoping section for more information.</p></dd>
|
|
|
|
|
|
<dt id="arg--">...<a class="anchor" aria-label="anchor" href="#arg--"></a></dt>
|
|
<dd><p>Arguments to be passed through to <code><a href="plotPNG.html">plotPNG()</a></code>.
|
|
These can be used to set the width, height, background color, etc.</p></dd>
|
|
|
|
|
|
<dt id="arg-alt">alt<a class="anchor" aria-label="anchor" href="#arg-alt"></a></dt>
|
|
<dd><p>Alternate text for the HTML <code><img></code> tag if it cannot be displayed
|
|
or viewed (i.e., the user uses a screen reader). In addition to a character
|
|
string, the value may be a reactive expression (or a function referencing
|
|
reactive values) that returns a character string. If the value is <code>NA</code> (the
|
|
default), then <code><a href="https://ggplot2.tidyverse.org/reference/get_alt_text.html" class="external-link">ggplot2::get_alt_text()</a></code> is used to extract alt text from
|
|
ggplot objects; for other plots, <code>NA</code> results in alt text of "Plot object".
|
|
<code>NULL</code> or <code>""</code> is not recommended because those should be limited to
|
|
decorative images.</p></dd>
|
|
|
|
|
|
<dt id="arg-outputargs">outputArgs<a class="anchor" aria-label="anchor" href="#arg-outputargs"></a></dt>
|
|
<dd><p>A list of arguments to be passed through to the implicit
|
|
call to <code><a href="plotOutput.html">plotOutput()</a></code> when <code>renderPlot</code> is used in an
|
|
interactive R Markdown document.</p></dd>
|
|
|
|
|
|
<dt id="arg-width-height">width, height<a class="anchor" aria-label="anchor" href="#arg-width-height"></a></dt>
|
|
<dd><p>not used. They are specified via the argument
|
|
<code>sizePolicy</code>.</p></dd>
|
|
|
|
</dl></div>
|
|
<div id="details">
|
|
<h2>Details</h2>
|
|
<p><code>expr</code> is an expression that generates a plot, similar to that in
|
|
<code>renderPlot</code>. Unlike with <code>renderPlot</code>, this expression does not
|
|
take reactive dependencies. It is re-executed only when the cache key
|
|
changes.</p>
|
|
<p><code>cacheKeyExpr</code> is an expression which, when evaluated, returns an object
|
|
which will be serialized and hashed using the <code><a href="https://rlang.r-lib.org/reference/hash.html" class="external-link">rlang::hash()</a></code>
|
|
function to generate a string that will be used as a cache key. This key is
|
|
used to identify the contents of the plot: if the cache key is the same as a
|
|
previous time, it assumes that the plot is the same and can be retrieved from
|
|
the cache.</p>
|
|
<p>This <code>cacheKeyExpr</code> is reactive, and so it will be re-evaluated when any
|
|
upstream reactives are invalidated. This will also trigger re-execution of
|
|
the plotting expression, <code>expr</code>.</p>
|
|
<p>The key should consist of "normal" R objects, like vectors and lists. Lists
|
|
should in turn contain other normal R objects. If the key contains
|
|
environments, external pointers, or reference objects — or even if it has
|
|
such objects attached as attributes — then it is possible that it will
|
|
change unpredictably even when you do not expect it to. Additionally, because
|
|
the entire key is serialized and hashed, if it contains a very large object
|
|
— a large data set, for example — there may be a noticeable performance
|
|
penalty.</p>
|
|
<p>If you face these issues with the cache key, you can work around them by
|
|
extracting out the important parts of the objects, and/or by converting them
|
|
to normal R objects before returning them. Your expression could even
|
|
serialize and hash that information in an efficient way and return a string,
|
|
which will in turn be hashed (very quickly) by the
|
|
<code><a href="https://rlang.r-lib.org/reference/hash.html" class="external-link">rlang::hash()</a></code> function.</p>
|
|
<p>Internally, the result from <code>cacheKeyExpr</code> is combined with the name of
|
|
the output (if you assign it to <code>output$plot1</code>, it will be combined
|
|
with <code>"plot1"</code>) to form the actual key that is used. As a result, even
|
|
if there are multiple plots that have the same <code>cacheKeyExpr</code>, they
|
|
will not have cache key collisions.</p>
|
|
</div>
|
|
<div id="interactive-plots">
|
|
<h2>Interactive plots</h2>
|
|
|
|
|
|
|
|
<p><code>renderCachedPlot</code> can be used to create interactive plots. See
|
|
<code><a href="plotOutput.html">plotOutput()</a></code> for more information and examples.</p>
|
|
</div>
|
|
<div id="see-also">
|
|
<h2>See also</h2>
|
|
<div class="dont-index"><p>See <code><a href="renderPlot.html">renderPlot()</a></code> for the regular, non-cached version of this
|
|
function. It can be used with <code><a href="bindCache.html">bindCache()</a></code> to get the same effect as
|
|
<code>renderCachedPlot()</code>. For more about configuring caches, see
|
|
<code><a href="https://cachem.r-lib.org/reference/cache_mem.html" class="external-link">cachem::cache_mem()</a></code> and <code><a href="https://cachem.r-lib.org/reference/cache_disk.html" class="external-link">cachem::cache_disk()</a></code>.</p></div>
|
|
</div>
|
|
|
|
<div id="ref-examples">
|
|
<h2>Examples</h2>
|
|
<div class="sourceCode"><pre class="sourceCode r"><code><span class="r-in"><span><span class="co">## Only run examples in interactive R sessions</span></span></span>
|
|
<span class="r-in"><span><span class="kw">if</span> <span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/interactive.html" class="external-link">interactive</a></span><span class="op">(</span><span class="op">)</span><span class="op">)</span> <span class="op">{</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="co"># A basic example that uses the default app-scoped memory cache.</span></span></span>
|
|
<span class="r-in"><span><span class="co"># The cache will be shared among all simultaneous users of the application.</span></span></span>
|
|
<span class="r-in"><span><span class="fu"><a href="shinyApp.html">shinyApp</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="fluidPage.html">fluidPage</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">sidebarLayout</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">sidebarPanel</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sliderInput.html">sliderInput</a></span><span class="op">(</span><span class="st">"n"</span>, <span class="st">"Number of points"</span>, <span class="fl">4</span>, <span class="fl">32</span>, value <span class="op">=</span> <span class="fl">8</span>, step <span class="op">=</span> <span class="fl">4</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span>,</span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">mainPanel</a></span><span class="op">(</span><span class="fu"><a href="plotOutput.html">plotOutput</a></span><span class="op">(</span><span class="st">"plot"</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span>,</span></span>
|
|
<span class="r-in"><span> <span class="kw">function</span><span class="op">(</span><span class="va">input</span>, <span class="va">output</span>, <span class="va">session</span><span class="op">)</span> <span class="op">{</span></span></span>
|
|
<span class="r-in"><span> <span class="va">output</span><span class="op">$</span><span class="va">plot</span> <span class="op"><-</span> <span class="fu">renderCachedPlot</span><span class="op">(</span><span class="op">{</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="https://rdrr.io/r/base/Sys.sleep.html" class="external-link">Sys.sleep</a></span><span class="op">(</span><span class="fl">2</span><span class="op">)</span> <span class="co"># Add an artificial delay</span></span></span>
|
|
<span class="r-in"><span> <span class="va">seqn</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/seq.html" class="external-link">seq_len</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">n</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="https://rdrr.io/r/graphics/plot.default.html" class="external-link">plot</a></span><span class="op">(</span><span class="va">mtcars</span><span class="op">$</span><span class="va">wt</span><span class="op">[</span><span class="va">seqn</span><span class="op">]</span>, <span class="va">mtcars</span><span class="op">$</span><span class="va">mpg</span><span class="op">[</span><span class="va">seqn</span><span class="op">]</span>,</span></span>
|
|
<span class="r-in"><span> xlim <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/range.html" class="external-link">range</a></span><span class="op">(</span><span class="va">mtcars</span><span class="op">$</span><span class="va">wt</span><span class="op">)</span>, ylim <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/range.html" class="external-link">range</a></span><span class="op">(</span><span class="va">mtcars</span><span class="op">$</span><span class="va">mpg</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">}</span>,</span></span>
|
|
<span class="r-in"><span> cacheKeyExpr <span class="op">=</span> <span class="op">{</span> <span class="fu"><a href="https://rdrr.io/r/base/list.html" class="external-link">list</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">n</span><span class="op">)</span> <span class="op">}</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">}</span></span></span>
|
|
<span class="r-in"><span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="co"># An example uses a data object shared across sessions. mydata() is part of</span></span></span>
|
|
<span class="r-in"><span><span class="co"># the cache key, so when its value changes, plots that were previously</span></span></span>
|
|
<span class="r-in"><span><span class="co"># stored in the cache will no longer be used (unless mydata() changes back</span></span></span>
|
|
<span class="r-in"><span><span class="co"># to its previous value).</span></span></span>
|
|
<span class="r-in"><span><span class="va">mydata</span> <span class="op"><-</span> <span class="fu"><a href="reactiveVal.html">reactiveVal</a></span><span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/data.frame.html" class="external-link">data.frame</a></span><span class="op">(</span>x <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/stats/Normal.html" class="external-link">rnorm</a></span><span class="op">(</span><span class="fl">400</span><span class="op">)</span>, y <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/stats/Normal.html" class="external-link">rnorm</a></span><span class="op">(</span><span class="fl">400</span><span class="op">)</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="va">ui</span> <span class="op"><-</span> <span class="fu"><a href="fluidPage.html">fluidPage</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">sidebarLayout</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">sidebarPanel</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sliderInput.html">sliderInput</a></span><span class="op">(</span><span class="st">"n"</span>, <span class="st">"Number of points"</span>, <span class="fl">50</span>, <span class="fl">400</span>, <span class="fl">100</span>, step <span class="op">=</span> <span class="fl">50</span><span class="op">)</span>,</span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="actionButton.html">actionButton</a></span><span class="op">(</span><span class="st">"newdata"</span>, <span class="st">"New data"</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span>,</span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">mainPanel</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="plotOutput.html">plotOutput</a></span><span class="op">(</span><span class="st">"plot"</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="va">server</span> <span class="op"><-</span> <span class="kw">function</span><span class="op">(</span><span class="va">input</span>, <span class="va">output</span>, <span class="va">session</span><span class="op">)</span> <span class="op">{</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="observeEvent.html">observeEvent</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">newdata</span>, <span class="op">{</span></span></span>
|
|
<span class="r-in"><span> <span class="fu">mydata</span><span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/data.frame.html" class="external-link">data.frame</a></span><span class="op">(</span>x <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/stats/Normal.html" class="external-link">rnorm</a></span><span class="op">(</span><span class="fl">400</span><span class="op">)</span>, y <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/stats/Normal.html" class="external-link">rnorm</a></span><span class="op">(</span><span class="fl">400</span><span class="op">)</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">}</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span> <span class="va">output</span><span class="op">$</span><span class="va">plot</span> <span class="op"><-</span> <span class="fu">renderCachedPlot</span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="op">{</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="https://rdrr.io/r/base/Sys.sleep.html" class="external-link">Sys.sleep</a></span><span class="op">(</span><span class="fl">2</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="va">d</span> <span class="op"><-</span> <span class="fu">mydata</span><span class="op">(</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="va">seqn</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/seq.html" class="external-link">seq_len</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">n</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="https://rdrr.io/r/graphics/plot.default.html" class="external-link">plot</a></span><span class="op">(</span><span class="va">d</span><span class="op">$</span><span class="va">x</span><span class="op">[</span><span class="va">seqn</span><span class="op">]</span>, <span class="va">d</span><span class="op">$</span><span class="va">y</span><span class="op">[</span><span class="va">seqn</span><span class="op">]</span>, xlim <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/range.html" class="external-link">range</a></span><span class="op">(</span><span class="va">d</span><span class="op">$</span><span class="va">x</span><span class="op">)</span>, ylim <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/range.html" class="external-link">range</a></span><span class="op">(</span><span class="va">d</span><span class="op">$</span><span class="va">y</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">}</span>,</span></span>
|
|
<span class="r-in"><span> cacheKeyExpr <span class="op">=</span> <span class="op">{</span> <span class="fu"><a href="https://rdrr.io/r/base/list.html" class="external-link">list</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">n</span>, <span class="fu">mydata</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> <span class="op">}</span>,</span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span><span class="op">}</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="fu"><a href="shinyApp.html">shinyApp</a></span><span class="op">(</span><span class="va">ui</span>, <span class="va">server</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="co"># A basic application with two plots, where each plot in each session has</span></span></span>
|
|
<span class="r-in"><span><span class="co"># a separate cache.</span></span></span>
|
|
<span class="r-in"><span><span class="fu"><a href="shinyApp.html">shinyApp</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="fluidPage.html">fluidPage</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">sidebarLayout</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">sidebarPanel</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sliderInput.html">sliderInput</a></span><span class="op">(</span><span class="st">"n"</span>, <span class="st">"Number of points"</span>, <span class="fl">4</span>, <span class="fl">32</span>, value <span class="op">=</span> <span class="fl">8</span>, step <span class="op">=</span> <span class="fl">4</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span>,</span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="sidebarLayout.html">mainPanel</a></span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="plotOutput.html">plotOutput</a></span><span class="op">(</span><span class="st">"plot1"</span><span class="op">)</span>,</span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="plotOutput.html">plotOutput</a></span><span class="op">(</span><span class="st">"plot2"</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span>,</span></span>
|
|
<span class="r-in"><span> <span class="kw">function</span><span class="op">(</span><span class="va">input</span>, <span class="va">output</span>, <span class="va">session</span><span class="op">)</span> <span class="op">{</span></span></span>
|
|
<span class="r-in"><span> <span class="va">output</span><span class="op">$</span><span class="va">plot1</span> <span class="op"><-</span> <span class="fu">renderCachedPlot</span><span class="op">(</span><span class="op">{</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="https://rdrr.io/r/base/Sys.sleep.html" class="external-link">Sys.sleep</a></span><span class="op">(</span><span class="fl">2</span><span class="op">)</span> <span class="co"># Add an artificial delay</span></span></span>
|
|
<span class="r-in"><span> <span class="va">seqn</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/seq.html" class="external-link">seq_len</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">n</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="https://rdrr.io/r/graphics/plot.default.html" class="external-link">plot</a></span><span class="op">(</span><span class="va">mtcars</span><span class="op">$</span><span class="va">wt</span><span class="op">[</span><span class="va">seqn</span><span class="op">]</span>, <span class="va">mtcars</span><span class="op">$</span><span class="va">mpg</span><span class="op">[</span><span class="va">seqn</span><span class="op">]</span>,</span></span>
|
|
<span class="r-in"><span> xlim <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/range.html" class="external-link">range</a></span><span class="op">(</span><span class="va">mtcars</span><span class="op">$</span><span class="va">wt</span><span class="op">)</span>, ylim <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/range.html" class="external-link">range</a></span><span class="op">(</span><span class="va">mtcars</span><span class="op">$</span><span class="va">mpg</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">}</span>,</span></span>
|
|
<span class="r-in"><span> cacheKeyExpr <span class="op">=</span> <span class="op">{</span> <span class="fu"><a href="https://rdrr.io/r/base/list.html" class="external-link">list</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">n</span><span class="op">)</span> <span class="op">}</span>,</span></span>
|
|
<span class="r-in"><span> cache <span class="op">=</span> <span class="fu">cachem</span><span class="fu">::</span><span class="fu"><a href="https://cachem.r-lib.org/reference/cache_mem.html" class="external-link">cache_mem</a></span><span class="op">(</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="va">output</span><span class="op">$</span><span class="va">plot2</span> <span class="op"><-</span> <span class="fu">renderCachedPlot</span><span class="op">(</span><span class="op">{</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="https://rdrr.io/r/base/Sys.sleep.html" class="external-link">Sys.sleep</a></span><span class="op">(</span><span class="fl">2</span><span class="op">)</span> <span class="co"># Add an artificial delay</span></span></span>
|
|
<span class="r-in"><span> <span class="va">seqn</span> <span class="op"><-</span> <span class="fu"><a href="https://rdrr.io/r/base/seq.html" class="external-link">seq_len</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">n</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="https://rdrr.io/r/graphics/plot.default.html" class="external-link">plot</a></span><span class="op">(</span><span class="va">mtcars</span><span class="op">$</span><span class="va">wt</span><span class="op">[</span><span class="va">seqn</span><span class="op">]</span>, <span class="va">mtcars</span><span class="op">$</span><span class="va">mpg</span><span class="op">[</span><span class="va">seqn</span><span class="op">]</span>,</span></span>
|
|
<span class="r-in"><span> xlim <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/range.html" class="external-link">range</a></span><span class="op">(</span><span class="va">mtcars</span><span class="op">$</span><span class="va">wt</span><span class="op">)</span>, ylim <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/range.html" class="external-link">range</a></span><span class="op">(</span><span class="va">mtcars</span><span class="op">$</span><span class="va">mpg</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">}</span>,</span></span>
|
|
<span class="r-in"><span> cacheKeyExpr <span class="op">=</span> <span class="op">{</span> <span class="fu"><a href="https://rdrr.io/r/base/list.html" class="external-link">list</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">n</span><span class="op">)</span> <span class="op">}</span>,</span></span>
|
|
<span class="r-in"><span> cache <span class="op">=</span> <span class="fu">cachem</span><span class="fu">::</span><span class="fu"><a href="https://cachem.r-lib.org/reference/cache_mem.html" class="external-link">cache_mem</a></span><span class="op">(</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span> <span class="op">}</span></span></span>
|
|
<span class="r-in"><span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="op">}</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="kw">if</span> <span class="op">(</span><span class="cn">FALSE</span><span class="op">)</span> <span class="op">{</span> <span class="co"># \dontrun{</span></span></span>
|
|
<span class="r-in"><span><span class="co"># At the top of app.R, this set the application-scoped cache to be a memory</span></span></span>
|
|
<span class="r-in"><span><span class="co"># cache that is 20 MB in size, and where cached objects expire after one</span></span></span>
|
|
<span class="r-in"><span><span class="co"># hour.</span></span></span>
|
|
<span class="r-in"><span><span class="fu"><a href="shinyOptions.html">shinyOptions</a></span><span class="op">(</span>cache <span class="op">=</span> <span class="fu">cachem</span><span class="fu">::</span><span class="fu"><a href="https://cachem.r-lib.org/reference/cache_mem.html" class="external-link">cache_mem</a></span><span class="op">(</span>max_size <span class="op">=</span> <span class="fl">20e6</span>, max_age <span class="op">=</span> <span class="fl">3600</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="co"># At the top of app.R, this set the application-scoped cache to be a disk</span></span></span>
|
|
<span class="r-in"><span><span class="co"># cache that can be shared among multiple concurrent R processes, and is</span></span></span>
|
|
<span class="r-in"><span><span class="co"># deleted when the system reboots.</span></span></span>
|
|
<span class="r-in"><span><span class="fu"><a href="shinyOptions.html">shinyOptions</a></span><span class="op">(</span>cache <span class="op">=</span> <span class="fu">cachem</span><span class="fu">::</span><span class="fu"><a href="https://cachem.r-lib.org/reference/cache_disk.html" class="external-link">cache_disk</a></span><span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/file.path.html" class="external-link">file.path</a></span><span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/basename.html" class="external-link">dirname</a></span><span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/tempfile.html" class="external-link">tempdir</a></span><span class="op">(</span><span class="op">)</span><span class="op">)</span>, <span class="st">"myapp-cache"</span><span class="op">)</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="co"># At the top of app.R, this set the application-scoped cache to be a disk</span></span></span>
|
|
<span class="r-in"><span><span class="co"># cache that can be shared among multiple concurrent R processes, and</span></span></span>
|
|
<span class="r-in"><span><span class="co"># persists on disk across reboots.</span></span></span>
|
|
<span class="r-in"><span><span class="fu"><a href="shinyOptions.html">shinyOptions</a></span><span class="op">(</span>cache <span class="op">=</span> <span class="fu">cachem</span><span class="fu">::</span><span class="fu"><a href="https://cachem.r-lib.org/reference/cache_disk.html" class="external-link">cache_disk</a></span><span class="op">(</span><span class="st">"./myapp-cache"</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="co"># At the top of the server function, this set the session-scoped cache to be</span></span></span>
|
|
<span class="r-in"><span><span class="co"># a memory cache that is 5 MB in size.</span></span></span>
|
|
<span class="r-in"><span><span class="va">server</span> <span class="op"><-</span> <span class="kw">function</span><span class="op">(</span><span class="va">input</span>, <span class="va">output</span>, <span class="va">session</span><span class="op">)</span> <span class="op">{</span></span></span>
|
|
<span class="r-in"><span> <span class="fu"><a href="shinyOptions.html">shinyOptions</a></span><span class="op">(</span>cache <span class="op">=</span> <span class="fu">cachem</span><span class="fu">::</span><span class="fu"><a href="https://cachem.r-lib.org/reference/cache_mem.html" class="external-link">cache_mem</a></span><span class="op">(</span>max_size <span class="op">=</span> <span class="fl">5e6</span><span class="op">)</span><span class="op">)</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span> <span class="va">output</span><span class="op">$</span><span class="va">plot</span> <span class="op"><-</span> <span class="fu">renderCachedPlot</span><span class="op">(</span></span></span>
|
|
<span class="r-in"><span> <span class="va">...</span>,</span></span>
|
|
<span class="r-in"><span> cache <span class="op">=</span> <span class="st">"session"</span></span></span>
|
|
<span class="r-in"><span> <span class="op">)</span></span></span>
|
|
<span class="r-in"><span><span class="op">}</span></span></span>
|
|
<span class="r-in"><span></span></span>
|
|
<span class="r-in"><span><span class="op">}</span> <span class="co"># }</span></span></span>
|
|
</code></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
|
|
<nav id="toc" data-toggle="toc" class="sticky-top"><h2 data-toc-skip>Contents</h2>
|
|
</nav></div>
|
|
</div>
|
|
|
|
|
|
<footer><div class="copyright">
|
|
<p></p><p>Developed by Winston Chang, Joe Cheng, JJ Allaire, Carson Sievert, Barret Schloerke, Garrick Aden-Buie, Yihui Xie, Jeff Allen, Jonathan McPherson, Alan Dipert, Barbara Borges, Posit Software, PBC.</p>
|
|
</div>
|
|
|
|
<div class="pkgdown">
|
|
<p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.2.0.</p>
|
|
</div>
|
|
|
|
</footer></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</body></html>
|
|
|