通过 terminal/console 保存脚本 运行 Rscript 的历史记录

Saving history for script run Rscript through terminal/console

对于我的工作,我 运行 在计算机集群的虚拟机上编写脚本。这些工作通常规模大,产出大。我想做的是通过终端 运行 脚本。最后,脚本会创建一个自身的副本,以便它包含脚本的每一行(如有必要,减去最后一行)。这对于我的工作生活中的可复制性和调试非常重要,因为有时我无法看到特定作业包含哪些参数或变量,因为我重复提交相同的脚本只是参数略有不同并且文件夹无法进行版本控制。

想象这个文件test.R:

a <- rnorm(100)


#test

# Saving history for reproducibility to folder
savehistory(file = 'test2.R')

现在,我 运行 通过虚拟节点上的控制台执行此操作并收到以下错误:

[XX home]$ Rscript test.R 
Error in.External2(C_savehistory, file): no history available to save
Calls: save history
Execution halted

是否有像 save history 这样的命令可以在刚刚执行的脚本中运行?

期望的结果是保存一个名为 test2.R 的文件,其中包含:

a <- rnorm(100)


#test

# Saving history for reproducibility to folder

您可以改为复制文件。由于您使用的是 Rscript,因此脚本名称以 --file=test.R 的形式包含在 commandArgs() 中。像这样的简单函数将 return 执行脚本的路径:

get_filename <- function() {
  c_args <- commandArgs()
  r_file <- c_args[grepl("\.R$", c_args, ignore.case = TRUE)]
  r_file <- gsub("--file=", "", r_file)
  r_file <- normalizePath(r_file)
  return(r_file)
}

然后您可以根据需要复制文件。例如,附加“.backup”:

script_name <- get_filename()
backup_name <- paste0(script_name, ".backup")
file.copy(script_name, backup_name)