Now sysinfo()
reports also on Ark (An R Kernel) and Positron via
flags ark
and positron
.
startup(debug = TRUE)
does a better job explaining why certain
Renviron and Rprofile files are skipped.
Add support for R_STARTUP_RDATA="warn"
, which will warn about the
existance of a .RData
file with information of its size and
timestamp. This can be combined with "remove"
and "rename"
,
e.g. R_STARTUP_RDATA="warn,remove"
.
Add support for sending debug output to file, which is controlled
by R option startup.debug.file
and environment variable
R_STARTUP_DEBUG_FILE
. For example,
R_STARTUP_DEBUG_FILE=Rprofile.log
will output debug messages to
Rprofile.log
in the working directory where R is launched. If
not specified, the debug is outputted via message()
as before.
startup()
did not process Rprofile.d/
files in Positron,
because Positron adds --no-init-file
to the command-line
arguments, despite being ignored by Positron.startup()
gained argument encoding
, which controls the encoding
used to parse the R startup files.
Now sysinfo()
report also on Jupyter, Visual Studio Code (VSCode)
webR via flags jupyter
, vscode
, and webr
.
Now install()
and uninstall()
respect environment variable
R_PROFILE_USER
, if specified.
Now startup()
ignores files and folders specific to version
control, e.g. .git
, .gitignore
, .hg
, .hgignore
, and
.svn
.
startup(debug = TRUE)
did not report on global variables starting
with a period, e.g. .Last()
.startup::startup(debug = TRUE)
now reports on environment
variable R_ENABLE_JIT
and whether the R just-in-time (JIT)
compiler will be enabled or not, and at what level.When startup()
tried to rename .RData
file (e.g. when
environment variable R_STARTUP_RDATA=rename
), it would produce
.Rprofile error: cannot xtfrm data frames
.
startup()
would give '.Rprofile error ...: could not find
function "anyNA"' in R (< 3.1.0).
sysinfo()
gained flag rapp
, which is TRUE
when running R from
the R.app GUI on macOS. This flag equals sysinfo()$gui == "AQUA"
.
sysinfo()
gained flag rgui
, which is TRUE
when running R from
the Rgui GUI on MS Windows. This flag equals sysinfo()$gui == "Rgui"
.
startup::startup(debug = TRUE)
now reports on any Rconsole
configure file processed when running R via the Rgui graphical user
interface (GUI) available on MS Windows.
startup::check()
no longer warns when R sets environment variables
R_LIBS_USER
and R_LIBS_SITE
to the default folders that do not
exist by default.
startup::check()
would report on an incorrect default value if R
option encoding
or stringsAsFactors
was set during startup to
an unsafe value.
An R script in environment variable R_STARTUP_FILE
will be
evaluated by startup::startup()
after Renviron and Rprofile files
have been processed, and after any R_STARTUP_INIT
code. For
example, R_STARTUP_FILE="setup.R" R
launches R, processes all R
startup files, and at the end parses and evaluates file 'setup.R'.
sysinfo()
gained field quiet
, which is TRUE if R
or Rscript
was called with command-line options -q
, --quiet
, or --silent
.
sysinfo()
gained field save
, which is TRUE if R
or Rscript
was called with command-line options --save
, FALSE if called with
--no-save
, and otherwise NA.
startup(debug = TRUE)
would report file information on R_PROFILE
and R_PROFILE_USER
files as if they were Renviron files, not
Rprofile files.Now startup::startup(debug = TRUE)
reports on any environment
variables, options, global variables, locale settings that were
added, removed, and changed while processing an Rprofile file.
startup::startup(debug = TRUE)
now reports on any changes to the
current working directory and the R library path while processing
an Rprofile file.
startup::startup(debug = TRUE)
already reported on updates to the
state of R's random number generator (RNG). Now it also reports on
updates to the RNG kind, including what the change was.
startup::startup()
now searches for Renviron.d/ and Rprofile.d/ (note,
without leading periods) in user's configuration folder in a way that is
compatible with tools::R_user_dir()
of R (>= 4.0.0) and that follows
operating-system standards. For example, for Linux ~/.config/R/startup/,
for macOS ~/Library/Preferences/org.R-project.R/R/startup/, and for
MS Windows %LOCALAPPDATA%/R/cache/R/startup/. If environment variable
XDG_CONFIG_HOME
is set, then ${XDG_CONFIG_HOME}/R/startup/ is used.
For now, startup::install()
will continue to create ~/.Renviron.d/ and
~/.Rprofile.d/ by default.
startup::install()
gained argument make_dirs
to control whether
directories .Renviron.d/ and .Rprofile.d/ should be created, if missing.
Add on_session_enter()
for registering R functions and expressions to be
evaluated at the end of R's startup process via a custom .First()
that is
added to the global environment. If there is a .First()
function on the
search path, including any preexisting one in the global environment, that
is called at the end.
Add on_session_exit()
for registering R functions and expressions to be
called at the very end when the R session terminates.
Now startup()
warns about non-standard, platform-specific capitalization of
Renviron and Rprofile file names. For example, although ~/.RProfile works
on MS Windows and macOS with non-case sensitive file systems, the officially
supported file name is ~/.Rprofile.
Now startup(debug = TRUE)
reports on .Last()
and .Last.sys()
.
Now startup(debug = TRUE)
gives a note if it detects that an Rprofile
script updated the state of R's random number generator (RNG).
Harmonized cache folder options toward tools::R_user_dir()
of R (>= 4.0.0).
startup(unload = TRUE)
failed when there was an .RData file and environment
variable R_STARTUP_RDATA
or R option startup.rdata
specifies "prompt"
.Now startup(debug = TRUE)
reports on R_SCRIPT_DEFAULT_PACKAGES
.
Now startup(debug = TRUE)
reports on tempdir()
and environment variables
TMPDIR
, TMP
, and TEMP
that controls the root of the temporary folder.
Now it is sufficient to call startup(dryrun = TRUE)
to see what the R
startup would have been. Previously one would also have to specify
debug = TRUE
.
Now startup(debug = TRUE)
reports on packages loaded, attached, unloaded,
and detached per Rprofile file processed. It also reports on other
environments attached and detached.
Now startup(debug = TRUE)
reports also on the Rprofile file in the base
package, i.e. system.file("R", "Rprofile", package = "base")
.
startup::startup(check = TRUE)
no longer warns if environment variables
R_LIBS_SITE
or R_LIBS_USER
have value NULL, which in R (>= 4.2.0)
corresponds to setting them to be empty.
startup::restart(quiet = TRUE)
would give an error in radian saying
--quiet
is not supported, but it's supported in radian (>= 0.2.8)
since 2018-08-27.startup(debug = TRUE)
now reports on number of lines and file size also
for the R_TESTS
file.
startup(debug = TRUE)
[sic!] now checks that the environment variables that
the different Renviron files set are actually set and produce an informative
warning message if not. This confirms that, at least for R 4.0.2 for Windows,
Rgui does not process ~/.Renviron unless Rgui is launched from that folder.
Using regular, non-fancy single quotes in any output produced.
startup.disable
(R_STARTUP_DISABLE
), startup.init
(R_STARTUP_INIT
), and startup.rdata
(R_STARTUP_RDATA
).help("startup.options", package = "startup")
, which lists environment
variables and R options that the startup package use.The new default of option stringsAsFactors
in R (>= 4.0.0) would trigger
a startup warning.
It was not possible to disable the validation of R option error
and
environment variables such as R_LIBS_USER
, R_PROFILE_SITE
, and
R_CHECK_ENVIRON
. These validations can now be disabled by specifying
argument check = FALSE
, or the corresponding R option, or environment
variable. Validation of error
specifically can be disable by adding
"error"
to environment variable R_STARTUP_CHECK_OPTIONS_IGNORE
or to
option startup.check.options.ignore
. The default is to ignore error
.
startup(all = TRUE)
now processes any startup folders in the home directory
before those in the current working directory. Previously it was vice
verse. With the new way, it is possible to override settings made in
~/.Renviron.d/ or ~/.Rprofile.d/ with custom ones in local ./.Renviron.d/
and ./.Rprofile.d/ folders.Setting environment variable R_STARTUP_RDATA
to "remove"
will cause an
existing './.RData' file to be skipped by automatically removing it.
If "rename"
, it will be renamed to './.RData.YYYYMMDD_hhmmss' where the
timestamp is the last time the file was modified. If "prompt"
, then the
user is prompted whether they want to load the file or rename it. In
non-interactive session, "prompt"
will fallback to loading by default.
To fallback to renaming the file, use "prompt,rename"
. Thus, setting
R_STARTUP_RDATA=rename
in an .Renviron file will make sure no .RData
file is ever loaded while still preserving them.
RStudio Console: The only way to prompt a user during the R startup process
in the RStudio Console is via a graphical popup window. Because of this,
R_STARTUP_RDATA=prompt
will trigger a popup window in RStudio if there is
a .RData file.
startup(debug = TRUE)
would not only report on the name of an environment
variable, but also parts of its value, if the value contained equal signs.
The source information, that is, the filename and line locations, were
dropped from functions defined via startup()
. To get the filename where
a function was defined use getSrcFilename(my_fcn, full.names = TRUE)
.
RStudio: Using renv together with startup()
while in the RStudio Console
would produce a false warning on the error
option being set.
startup::startup()
will return immediately without processing R startup
files if environment variable R_STARTUP_DISABLE
is set to TRUE.
Added flag radian
to sysinfo()
indicating whether R runs in radian
(previously known as rtichoke and rice) or not. Please stop using the
rice
and rtichoke
flags.
The startup::startup()
code snipped injected in the .Rprofile file by
startup::install()
now prefix error messages with '.Rprofile error: '
to help troubleshooting errors.
The validation of R_LIBS
, R_LIBS_SITE
, R_LIBS_USER
by startup::check()
had a _R_CHECK_LENGTH_1_LOGIC2_
bug.
The startup checks asserting that update.packages()
is not called would
pick up not only those with the period ('.') but any character in that
position.
startup::startup()
no longer warn about startup files with non-declared key
names being skipped. This warning was introduced in startup 0.10.0 due to
how such files were filtered out.Renviron and Rprofile startup files that use <key>!=<value>
filters with
non-defined keys are now included. Previously they were skipped. Note
that <key>=<value>
files are indeed skipped when <key>
is not defined.
startup()
now produces an informative warning if it detects that an R
option that is considered unsafe to change from its default, e.g. changing
encoding
other than in interactive mode may break package installations
and changing stringsAsFactors
will summon the dead.
Added support for when=<periodicity>
file declarations, where <periodicity>
can be 'once', 'hourly', 'daily', 'weekly', 'fortnightly', and 'monthly'.
A startup file with such a declaration will be processed at most once per
<periodicity>
, e.g. a file with 'when=daily' somewhere in the pathname will
be processed once per day. The periodicity is based on the walltime in the
local time zone, e.g. if a file with 'when=daily' was processed one minute
before midnight, it will be processed again if an R session is started one
minute past midnight. Updating the file timestamp of a 'when' file will
reset its timer.
Code in environment variable R_STARTUP_INIT
will now be evaluated by
startup::startup()
after Renviron and Rprofile files have been processed.
For example, R_STARTUP_INIT="x <- 1" R
will launch R with x == 1
.
startup(debug = TRUE)
now also reports on .First()
.
The messages of warnings and errors produced by the startup package itself now mention which startup function they originate from. This helps to identify the origin of these when produced during the R startup process.
Added warn()
, which produces a warning with information on which R source
file it was produced in, if any.
R CMD check --as-cran
NOTEs.startup()
did not ignore files with names such as #foo.R#.renviron()
and rprofile()
. Use renviron_d()
and rprofile_d()
.startup(debug = TRUE)
now also displays the expanded path to any file or
folder listed. It also gives information on files that known environment
variables (e.g. R_ENVIRON_USER
) point to. For Renviron files, it also
reports on names of the environment variables set in each of those files.
startup(debug = TRUE)
reports on the search path and loaded namespaces,
and what packages will be attached after R's startup finishes.
Added character dirname
to sysinfo()
specifying the basename of the
current working directory.
startup(check = TRUE)
, warns if R_ENVIRON
, R_ENVIRON_USER
, R_PROFILE
,
R_PROFILE_USER
, R_BUILD_ENVIRON
, or R_CHECK_ENVIRON
specifies non-existing
files.
startup::check(fix = TRUE)
now returns the pathnames of any files that
needed to be fixed and was successfully updated.
RStudio: startup()
now gives an informative warning if option error
is
set during the R startup and it will be overridden by RStudio's debug
settings.
Windows: Calling startup::restart()
in the Windows RGui now produces an
error clarifying that the RGui cannot be restarted this way.
startup::install()
would append the startup::startup()
statement to the
last line in .Rprofile if that line (incorrectly) did not have a newline.
startup::startup(check = TRUE)
would give "Error in if (!eof_ok(file)) {
argument is of length zero" on Windows if the Rprofile file checked is
a symbolic link.
<key>=<value>
filters with
non-declared keys are skipped. Previously they were always processed.
This update makes it easier to include "secrets", e.g. files in folder
~/.Renviron.d/private/SECRET=banana/ will only be included if the
environment variable SECRET
is set to exactly 'banana'. An informative
warning, which can be disabled, will be produced by startup 0.10.* until
startup 0.11.0 is released.Added is_debug_on()
which returns TRUE if the startup debug mode is on.
To control the debug mode, see ?startup::startup
.
startup(debug = TRUE)
reports on several R_*
environment variables.
restart()
gained argument quiet
for controlling whether the restart
should be quiet or not.
Added flag microsoftr
to sysinfo()
indicating whether R runs in
Microsoft R Open or not.
Added flag pqr
to sysinfo()
indicating whether running pqR ("A Pretty
Quick # Version of R"), or not.
Added flag rstudioterm
to sysinfo()
indicating whether R runs in an
RStudio Terminal or not. To test whether R runs via the RStudio Console,
use the rstudio
flag.
Added flag rtichoke
to sysinfo()
indicating whether R runs in rtichoke
(previously known as Rice) or not. Please stop using the rice
flag and
start using the rtichoke
instead (both have identical values).
The ess
flag of sysinfo()
is now based on whether "ESSR" is in search()
or
not - used to check for environment variable EMACS
equaling "t" or not.
Now startup::restart()
also work when running R via rtichoke.
startup::restart()
would not work in the RStudio Terminal. Note that it
does not work in the RStudio Console due to limitations in RStudio.
On Windows, startup::startup()
would produce a false warning on non-existing
R_LIBS_USER
folders.
restart()
for restarting the current R session. It can also be used
to adjust various R command-line arguments and environment variables, e.g.
restart(as = "R CMD build")
mimics the R CMD build
setup as far as
possible.Added startup::current_script()
which returns the .Rprofile.d/ pathname
that is currently processed by startup::startup()
.
Added flag rice
to sysinfo()
indicating whether R runs via Rice or not,
meaning it can be used as a file and directory name tag, e.g. rice=TRUE.
startup(debug = TRUE)
outputs much more information on what has taken place
and what will take place through R's startup process.
startup()
gained argument check
for controlling whether the content of
startup files should be validated or not.
check()
, and therefore also startup(check = TRUE)
, warns if R_LIBS
,
R_LIBS_SITE
, or R_LIBS_USER
specifies non-existing directory.
renviron()
and rprofile()
are now defunct. Removed api()$renviron()
and api()$rprofile()
. Use renviron_d()
and rprofile_d()
instead.install(backup = TRUE)
guarantees that the .Rprofile file is backed up,
otherwise, an error is produced. Previously it could silently fail if a
backup file with the exact same name already existed.Convenient session details are now gathered and recorded as R options
immediately after processing '.Renviron.d' files. These options, prefixed
startup.session.
, are available while processing '.Rprofile.d' files and,
by default, also after startup::startup()
has completed. For information
on session details recorded, see help("startup_session_options")
.
Added a package vignette (available only in R >= 3.0.2).
startup()
ignores more of the hidden files and folders that macOS may create
and which should not be sourced during startup. For instance, when copying
a file 'foo.R' to a non-macOS file system, an auxiliary file '._foo.R' may
be created as well.New conditional <key>=<value>
specification: an unknown <key>
(i.e. one
that is not one of the known sysinfo()
fields or 'package') will be
interpreted as the name of an environment variable. For instance, files
path/LANGUAGE=en/*.R will be included only if system environment variable
LANGUAGE
equals 'en' (or is not set).
startup::install()
now injects try(startup::startup())
such that
install.packages("startup")
will work even when startup is not installed,
e.g. after a major-version R update.
startup::install()
and startup::uninstall()
now output messages on what is
done and why, and they now return the R startup file modified. They also
produce a warning if startup is already installed or uninstalled,
respectively.
startup::install()
gained argument overwrite
to control whether to append
(default) to a pre-existing R startup file or to overwrite it.
ROBUSTNESS: Backups now assert that not only the backup files are created, but also that they have the same file size as the original file.
Startup directory or file names that start with two or more periods are now excluded, e.g. ~/.Rprofile.d/..hide/test.R.
startup()
protects against attempts to update R packages also via
pacman::p_up()
in addition to utils::update.packages()
.
Added flag ess
to sysinfo()
indicating whether R runs under Emacs Speaks
Statistics (ESS) or not.
startup(debug = TRUE)
detects if R_TESTS
is set and reports which the file
is and that the base package has already processed it.
startup()
ignores macOS files named .DS_Store and directories named
__MACOSX (and their content). Previously, such files could result
in startup errors.Now it is possible to do negated filename specifications, e.g. hpc,package=future/os!=windows.
Filename flags can now be specified a TRUE, FALSE, T, F, 1, and 0 (non-case sensitive), e.g. interactive=false and interactive=0.
Added element gui
to sysinfo()
.
Added flags rstudio
and wine
to sysinfo()
indicating whether R runs via
RStudio and via Linux Wine, respectively.
New conditional <key>=<value>
specification: Directory and file names
containing a package=<name>
specification will be processed if and only if
package <name>
is installed.
Errors occurring while sourcing an Rprofile file now also contain
information about in file the error occurred. Lines with invalid syntax in
Renviron files are ignored with a message outputted saying so. Due to
limitations in how base::readRenviron()
works, it is not possible to detect
these errors nor capture the outputted message.
Now objects are auto printed to match the behavior of the R startup process.
startup(debug = TRUE)
now outputs time stamps since start per entry.
renviron()
and rprofile()
were renamed to renviron_d()
and rprofile_d()
,
respectively.A file extension *.R would incorrectly become part of the <value>
in a
trailing <key>=<value>
specification.
Now R_STARTUP_DEBUG=TRUE
also works for Rscript; used to work only for the
R executable.
Some macOS backup files would not be filtered out when running on Windows.
sibling = FALSE
to startup()
. If sibling = TRUE
, the
corresponding startup file needs to exist in the same location as the
directory in order for the directory to be processed.