File: runifChanged.Rd

package info (click to toggle)
hmisc 5.2-5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,044 kB
  • sloc: asm: 28,907; f90: 590; ansic: 415; xml: 160; fortran: 75; makefile: 2
file content (52 lines) | stat: -rw-r--r-- 2,540 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/hashCheck.r
\name{runifChanged}
\alias{runifChanged}
\title{runifChanged}
\usage{
runifChanged(fun, ..., file = NULL, .print. = TRUE, .inclfun. = TRUE)
}
\arguments{
\item{fun}{the (usually slow) function to run}

\item{...}{input objects the result of running the function is dependent on}

\item{file}{file in which to store the result of \code{fun} augmented by attributes containing hash digests}

\item{.print.}{set to \code{TRUE} to list which objects changed that neessitated re-running \code{f}}

\item{.inclfun.}{set to \code{FALSE} to not include \code{fun} in the hash digest, i.e., to not require re-running \code{fun} if only \code{fun} itself has changed}
}
\value{
the result of running \code{fun}
}
\description{
Re-run Code if an Input Changed
}
\details{
Uses \code{hashCheck} to run a function and save the results if specified inputs have changed, otherwise to retrieve results from a file.  This makes it easy to see if any objects changed that require re-running a long simulation, and reports on any changes.  The file name is taken as the chunk name appended with \code{.rds} unless it is given as \verb{file=}.  \code{fun} has no arguments.  Set \code{.inclfun.=FALSE} to not include \code{fun} in the hash check (for legacy uses).  The typical workflow is as follows.

\if{html}{\out{<div class="sourceCode">}}\preformatted{f <- function(       ) \{
# . . . do the real work with multiple function calls ...
\}
seed <- 3
set.seed(seed)
w <- runifChanged(f, seed, obj1, obj2, ....)
}\if{html}{\out{</div>}}

\verb{seed, obj1, obj2}, ... are all the objects that \code{f()} uses that if changed
would give a different result of \code{f()}.  This can include functions such as
those in a package, and \code{f} will be re-run if any of the function's code
changes.  \code{f} is also re-run if the code inside \code{f} changes.
The result of \code{f} is stored with \code{saveRDS} by default in file named \code{xxx.rds}
where \code{xxx} is the label for the current chunk.  To control this use instead
\code{file=xxx.rds} add the file argument to \code{runifChanged(...)}.  If nothing has
changed and the file already exists, the file is read to create the result
object (e.g., \code{w} above).  If \code{f()} needs to be run, the hashed input objects
are stored as attributes for the result then the enhanced result is written to the file.

See \href{https://hbiostat.org/rflow/caching.html}{here} for examples.
}
\author{
Frank Harrell
}