使用源函数运行另一个 R 脚本
本文探讨如何使用 source()
函数运行位于相同或不同目录中的另一个 R 脚本。
我们将为我们的文件假设以下条件。
- 主脚本的路径被硬编码在包装脚本的
source()
函数调用中。 - 主脚本访问的资源在同一目录或其子目录下;路径必须相对于它。
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())
- 在任意文件夹中打开一个终端窗口。
- 运行 R 命令获取 R 命令行(控制台)。
- 运行
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 脚本。
主脚本的相对(甚至绝对)路径必须在包装脚本中硬编码。主脚本访问的资源应该和自己在同一个目录下或者在一个子目录下。
相关文章
R 中具有多个条件的函数向量化
发布时间:2023/03/21 浏览次数:64 分类:编程语言
-
一项常见的数据分析任务是根据同一行的其他列使用一个或多个条件创建或更新数据框列。 如果我们尝试使用 if 语句来执行此操作,则只会使用第一行来测试条件,并且会根据该行更
在 R 中读取 xlsx 文件
发布时间:2023/03/21 浏览次数:66 分类:编程语言
-
在这篇文章中,你将会了解到两个在 R 中读取 xlsx 文件的最完整和最容易使用的库:readxl 和 openxlsx。