在VSCode与HPC环境中获取当前运行的R脚本文件名
解决方案:HPC运行R脚本时在Slurm日志中显示脚本名称
你用rstudioapi::getSourceEditorContext()报错是因为这个函数仅在RStudio桌面/服务器环境中可用,而HPC上是通过命令行运行R(Rscript),没有加载RStudio的API环境,所以必然报错。下面给你三种可行的替代方案:
方法1:命令行传参(简单直接)
在R脚本中读取手动传入的脚本名称,然后输出到日志:
# 读取命令行末尾传入的脚本名 script_name <- commandArgs(trailingOnly = TRUE)[1] cat("\n\n\nCurrent script: ", basename(script_name), "\n\n\n\n")
运行脚本时(或在Slurm脚本中),把脚本名作为参数传入:
Rscript your_script.R your_script.R
方法2:自动提取脚本路径(无需手动传参)
通过commandArgs()自动提取Rscript运行时的脚本路径,不需要额外传参:
# 从命令行参数中筛选出带--file=的项 cmd_args <- commandArgs(trailingOnly = FALSE) script_path <- grep("--file=", cmd_args, value = TRUE) # 去掉--file=前缀,提取纯路径 script_path <- sub("--file=", "", script_path) # 获取脚本文件名 script_name <- basename(script_path) cat("\n\n\nCurrent script: ", script_name, "\n\n\n\n")
直接用常规命令运行即可,Slurm脚本里正常写Rscript your_script.R就行,日志里会自动输出脚本名。
方法3:在Slurm脚本中直接输出(无需修改R脚本)
如果不想改动R脚本,可以在Slurm脚本里直接添加echo命令,把脚本名写入日志:
#!/bin/bash #SBATCH --job-name=your_job #SBATCH --output=slurm-%j.out # 其他Slurm参数... # 输出脚本名到日志文件 echo -e "\n\n\nCurrent script: your_script.R\n\n\n\n" >> slurm-${SLURM_JOB_ID}.out # 运行R脚本 Rscript your_script.R
注意:方法2不适用于用source()命令运行脚本的场景,但HPC上通常都是用Rscript直接执行脚本,所以完全适用。
内容的提问来源于stack exchange,提问作者Bruna Amaral
相关产品推荐
相关产品推荐

