R’s equivalent of nodemon. Designed to make development easier by automatically reloading your R scripts and applications or executing arbitrary R expressions when files change.
can be used to:
rmon will monitor your source files for any changes and automatically restart/rerun your server or execute your custom R code. this allows you to focus on coding without manually restarting your server every time you make a change.
just like nodemon, rmon is perfect for development.
to install the package from CRAN use:
install.packages("rmon")
install the dev version from GitHub:
::install_github(repo = "kennedymwavu/rmon") remotes
::monitor(
rmondir = ".",
file = "app.R"
)
::monitor(dir = ".", expr = {
rmoncat('my custom expression at:', as.character(Sys.time()), '\n')
# ... rest of your R code here
})
parameters:
dir
: character vector. directory to monitor for
changesfile
: file to rerun when changes are detected (mutually
exclusive with expr
)expr
: R expression to execute when changes are detected
(mutually exclusive with file
)::monitor(
rmondir = c("path-to-first-dir", "path-to-another-dir"),
file = "app.R"
)
if multiple directories are specified, file
is assumed
to be in the first directory.
by default, {rmon}
monitors all files in
dir
for changes.
to watch only .R
, .html
, .css
and .js
files, set the ext
parameter:
::monitor(
rmondir = ".",
file = "app.R",
ext = c("R", "html", "css", "js")
)
to ignore the file dev.R
, do:
::monitor(
rmondir = ".",
file = "app.R",
exclude_files = "dev.R"
)
to ignore the directory test/
:
::monitor(
rmondir = ".",
file = "app.R",
exclude_dirs = "test"
)
to ignore all files whose names match the pattern
test
:
::monitor(
rmondir = ".",
file = "app.R",
exclude_patterns = "test"
)
to ignore changes to hidden files, set
monitor_hidden = FALSE
:
::monitor(
rmondir = ".",
file = "app.R",
monitor_hidden = FALSE
)
in some situations, you may want to delay restarting until multiple files have changed.
by default, rmon checks for file changes every second. if you’re uploading or modifying multiple files, this can lead to unnecessary multiple restarts of your application.
to delay restarting and avoid this issue, use the delay
parameter:
::monitor(
rmondir = ".",
file = "app.R",
delay = 10
)
delay
: a length one numeric. number of seconds to wait
before checking for file changes again.rmon now supports executing arbitrary R expressions when files change, providing more flexibility than just rerunning scripts.
::monitor(dir = ".", expr = {
rmoncat("reading some csv file...\n")
<- read.csv("data.csv")
data cat("summarizing file contents...\n")
summary(data)
})
::monitor(
rmondir = ".",
expr = {
tryCatch(
{source("functions.R")
cat("Functions reloaded successfully\n")
},error = function(e) {
cat("Error reloading functions:", e$message, "\n")
}
)
},on_error = "continue" # or "stop"
)
# capture and display output (default)
::monitor(
rmondir = ".",
expr = {
<- some_analysis()
result print(result)
},capture_output = TRUE
)
# silent execution
::monitor(
rmondir = ".",
expr = {
<- paste(Sys.time(), "- Files changed")
log_entry cat(log_entry, file = "changes.log", append = TRUE)
},capture_output = FALSE
)
::monitor(
rmondir = ".",
ext = c("R", "Rmd"),
expr = {
cat("R or Rmd file changed!\n")
# rebuild documentation, run tests, etc.
} )