通过终端/控制台保存脚本运行Rscript的历史记录

通过终端/控制台保存脚本运行Rscript的历史记录,r,rscript,R,Rscript,在我的工作中,我在计算机集群上的虚拟机上运行脚本。这些工作通常规模很大,产出也很大。我想做的是通过终端运行脚本。最后,脚本会创建自身的副本,以便包含脚本中的每一行(必要时减去最后一行)。这对于我工作中的可复制性和调试非常重要,因为我有时无法看到某个特定工作包含哪些参数或变量,因为我重复提交同一个脚本,只是参数略有不同,并且文件夹无法进行版本控制 想象一下这个文件test.R: a <- rnorm(100) #test # Saving history for reproducibi

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

想象一下这个文件
test.R

a <- rnorm(100)


#test

# Saving history for reproducibility to folder
savehistory(file = 'test2.R')
是否有类似于
save history
的命令可以在刚刚执行的脚本中工作

所需的结果是保存一个名为
test2.R
的文件,其中包含以下内容:

a <- rnorm(100)


#test

# Saving history for reproducibility to folder

a您可以复制该文件。由于您使用的是
Rscript
,脚本名称以
--file=test.R
的形式包含在
commandArgs()
中。类似这样的简单函数将返回执行脚本的路径:

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)
}

get\u文件名Rscript test.R不工作有什么原因吗?运行脚本时存储的历史记录就是脚本本身,对吗?是的,这是计划,但至少在我的linux虚拟机上不起作用。不,我想问的是,为什么需要将历史记录写入test2.R,因为理论上只包含test.R的内容。当test.R已经包含您想要的输出时,创建test2.R的目的是什么?因为我想创建用于提交作业的脚本的精确副本,并使用时间戳保存它,以便在作业完成后能够返回到它,并再次查看它,而无需为提交作业引入任何后续更改再加上参数差。
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)
}
script_name <- get_filename()
backup_name <- paste0(script_name, ".backup")
file.copy(script_name, backup_name)