【问题标题】:Saving history for script run Rscript through terminal/console通过终端/控制台保存脚本运行 Rscript 的历史记录
【发布时间】:2020-10-28 14:41:58
【问题描述】:

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

想象一下这个文件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 test.R 不起作用是有原因的吗?运行脚本时存储的历史就是脚本本身吧?
  • 是的,这将是计划,但它至少在我的 linux 虚拟机上不起作用。
  • 不,我问你为什么需要将历史记录写到 test2.R,因为理论上包含的所有内容都是 test.R 的内容。当 test.R 已经包含你想要的输出时,创建 test2.R 的目的是什么?
  • 因为我想创建我用来提交作业的脚本的完全相同的副本并用时间戳保存它,这样我就可以在作业完成后返回它并查看它再次没有任何后续更改,为再次提交它而引入参数差异。

标签: r rscript


【解决方案1】:

您可以改为复制文件。由于您使用的是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)
}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多