使用源函数运行另一个 R 脚本

Jesse John 2023年1月30日
  1. R 中的 source 函数
  2. 在 R 中使用主脚本的绝对路径
  3. 在 R 中使用主脚本的相对路径
  4. 结论
使用源函数运行另一个 R 脚本

本文探讨如何使用 source() 函数运行位于相同或不同目录中的另一个 R 脚本。

我们将为我们的文件假设以下条件。

  1. 主脚本的路径被硬编码在包装脚本的 source() 函数调用中。
  2. 主脚本访问的资源在同一目录或其子目录下;路径必须相对于它。

R 中的 source 函数

我们可以使用 source() 函数让 R 解析和评估存储在 R 脚本中的代码。

chdir 参数可以临时将 R 的工作目录更改为传递给 source() 的脚本目录。

在 R 中使用主脚本的绝对路径

如果包装脚本中主脚本的路径是绝对路径,则它可以是文件系统中相对于包装脚本的任何位置。我们需要在 source() 函数中使用 chdir = TRUE 以使 R 能够找到主脚本所需的资源。

例如,使用带有以下代码的包装脚本。包装文件和主脚本可以在任何地方。

# Get and print the working directory.
print("The starting working directory was:")
print(getwd())

# Call and process the main script file.
source("/absolute/path/to/main/script/filename.R", chdir = TRUE)

print("Final working directory")
print(getwd())
  1. 在任意文件夹中打开一个终端窗口。
  2. 运行 R 命令获取 R 命令行(控制台)。
  3. 运行 getwd() 命令。

运行 R 命令的目录是当前工作目录。使用以下命令运行包装脚本,提供绝对路径。

source("/absolute/path/to/wrapper/script/filename.R")

R 将执行包装脚本中的代码。它会将工作目录临时更改为主脚本所在的目录。

它将执行主脚本,然后将工作目录更改回调用包装脚本的原始位置。

我们在调用包装脚本时没有使用 chdir = TRUE,因为主脚本与包装脚本不在同一个文件夹中。

在 R 中使用主脚本的相对路径

如果主脚本与包装脚本位于同一文件夹或子文件夹中,我们可以在包装脚本中使用主脚本的相对路径。

命令行中使用的 source() 函数首先让 R 使用 chdir = TRUE 将工作目录临时更改为包装脚本。

如果主脚本位于子文件夹中,则对包装脚本中的 source() 的调用再次使 R 临时将工作目录更改为主脚本的工作目录。

例如,使用包含以下代码的包装文件。

# Get and print the first temporary working directory.
print("The first temporary working directory is:")
print(getwd())

# Call and process the real file.
source("relative_path_from_wrapper_to_main_script/filename.R", chdir = TRUE)

print("Current temporary working directory")
print(getwd())

仅当主脚本位于包含包装脚本的文件夹的子文件夹中时,才需要参数 chdir = TRUE

在任意文件夹中打开 R,然后执行包装脚本,如下所示。

source("/absolute/path/to/wrapper/script/filename.R", chdir = TRUE)

现在,在命令行上调用包装脚本时需要 chdir = TRUE,因为我们想首先将工作目录更改为包装脚本的工作目录。

如果我们在与包装脚本相同的目录中打开 R,则不需要路径和 chdir

脚本完成执行后,运行 getwd() 命令以验证当前工作目录是否是运行 R 的目录。

结论

我们看到了如何结合 source() 函数和它的 chdir 参数从另一个包装脚本执行主 R 脚本。

主脚本的相对(甚至绝对)路径必须在包装脚本中硬编码。主脚本访问的资源应该和自己在同一个目录下或者在一个子目录下。

作者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

相关文章 - R Function