批量运行多个R脚本并打印运行状态
曾老师曾经有一篇推文《批量运行多个R脚本》,介绍了批量运行R脚本的思路,同时也提出了一些问题,今天就这个学徒作业,我们来探究一下。
首先前往github[1]下载R脚本。
打开以后可以发现这里有19个R脚本,如果把这些R代码文件一个个打开再运行,无疑增加了很多工作量。
首先在「KOR_HCC-main/code」文件夹中新建一个R project,然后在「KOR_HCC-main」文件夹下新建一个「results」目录。曾老师提供的代码是
fs=list.files('./',pattern = '*.R$')
fs
lapply(fs, function(x){
print(x)
source(x)
})
这个代码有一个小问题,即有一些脚本可能由于缺包或者里面有小bug,就会导致报错退出循环。
实测在我的R环境下,运行到第3个代码遇到了报错,此时Fig 1A和Fig 1B的结果已经产生。
这个时候我们希望脚本继续运行,同时打印各个脚本的运行情况。
我们参考教程R语言tryCatch使用方法:判断Warning和Error[2]和中断运行 r 忽略报错 继续运行[3](这个教程中的代码有些问题,需要自己修改调试),使用「tryCatch」来解决这个问题。
tryCatc帮助文档
result = tryCatch({
#正常的逻辑
expr},
warning = function(w) {
#出现warning的处理逻辑
warning-handler-code},
error = function(e) {
#出现error的处理逻辑
error-handler-code},
finally = {
#不管出现异常还是正常都会执行的代码模块,
#一般用来处理清理操作,例如关闭连接资源等。
cleanup-code}
第一次学习tryCatch,经过反复调试,修改代码为
fs=list.files('./',pattern = '*.R$');fs
for (i in fs){tryCatch(
{source(i)},
warning = function(i){message("warning @ ",i);return(NA)},
error = function(i){message("error @ ",i);return(NA)},
finally = function(i){message("next......")}
)}
运行结果如下
发现很多由于包缺失造成的报错,同时也生成了更多的结果文件。
接下来我们来统一安装这些缺失的R包,并使用library检验是否成功安装。
BiocManager::install(c("GGally","Rtsne","RGtk2","dendsort","monocle","Barnard"))
安装完以后重新运行有21份结果。
最终代码
此外,我发现这个代码有部分是冗余的,同时也不能展示出现问题的究竟是哪一个脚本,因此重新修改为
fs=list.files('./',pattern = '*.R$');fs
for (i in fs){tryCatch(
{source(i)},
warning = function(a){message("warning @ ", i," @ ", a)},
error = function(b){message("error @ ",i," @ ", b)}
)}
解释
这个代码也很好理解,首先用list.files() 列出工作目录的所有脚本,再用for in循环依次执行tryCatch,依次运行每一个脚本,如果运行过程中有warning,就会提示「warning @ 脚本名 @ warning的具体内容」,如果运行中有error,就会提示「error @ 脚本名 @ error的具体内容」。
因为有个R包始终装不上,查看一下已经被移除了CRAN,就不继续折腾了,以提供思路为主。
参考资料
[1]
测试脚本下载地址: https://github.com/sangho1130/KOR_HCC
[2]
R语言tryCatch使用方法:判断Warning和Error: https://blog.sciencenet.cn/blog-2577109-1251678.html
[3]
中断运行 r 忽略报错 继续运行: https://blog.csdn.net/qq_52813185/article/details/123338171
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的