Skip to content

This function is meant to intercept calls to base::system.file(), so that it behaves well with packages loaded by devtools. It is made available when a package is loaded with load_all().


shim_system.file(..., package = "base", lib.loc = NULL, mustWork = FALSE)



character vectors, specifying subdirectory and file(s) within some package. The default, none, returns the root of the package. Wildcards are not supported.


a character string with the name of a single package. An error occurs if more than one package name is given.


a character vector with path names of R libraries. See ‘Details’ for the meaning of the default value of NULL.


logical. If TRUE, an error is given if there are no matching files.


When system.file is called from the R console (the global environment), this function detects if the target package was loaded with load_all(), and if so, it uses a customized method of searching for the file. This is necessary because the directory structure of a source package is different from the directory structure of an installed package.

When a package is loaded with load_all, this function is also inserted into the package's imports environment, so that calls to system.file from within the package namespace will use this modified version. If this function were not inserted into the imports environment, then the package would end up calling base::system.file instead.