加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

脚本如何在命令行中运行R?

发布时间:2020-12-15 19:00:13 所属栏目:安全 来源:网络整理
导读:我有一个脚本(称之为Main.R),它具有以下代码,以便在运行时找到它自己: frame_files - lapply(sys.frames(),function(x) x$ofile)frame_files - Filter(Negate(is.null),frame_files) main.dir - dirname(dirname(frame_files[[length(frame_files)]])) 这用
我有一个脚本(称之为Main.R),它具有以下代码,以便在运行时找到它自己:
frame_files <- lapply(sys.frames(),function(x) x$ofile)
frame_files <- Filter(Negate(is.null),frame_files) 
main.dir <- dirname(dirname(frame_files[[length(frame_files)]]))

这用于获取其自己的目录main.dir上方的目录,该目录用于调用相对于此路径的其他脚本.

例如,我对从命令行运行此脚本感兴趣

R CMD BATCH Main.R

要么

Rscript Main.R

不幸的是,当我从命令行调用脚本时,上面的命令不起作用.

是否有我可以在Main.R中使用的代码或者我可以使用的R或Rscript的调用选项?

更具体地说,该解决方案需要在Windows中运行.

下面是一个解决方案,当使用source或Rscript运行脚本时,它将为您提供正确的文件目录路径.
# this is wrapped in a tryCatch. The first expression works when source executes,the
# second expression works when R CMD does it.
full.fpath <- tryCatch(normalizePath(parent.frame(2)$ofile),# works when using source
               error=function(e) # works when using R CMD
                     normalizePath(unlist(strsplit(commandArgs()[grep('^--file=',commandArgs())],'='))[2]))
dirname(full.fpath)

关键是normalizePath函数.给定相对或缩写的路径名,normalizePath将返回有效路径或引发错误.从Rscript运行脚本时,如果为normalizePath提供当前脚本的基本文件名,它将返回完整路径,无论您当前的目录是什么.当你提供R CMD的相对路径并且当前目录中有一个同名的脚本时,它甚至可以获得正确的路径!

在上面的代码中,我从commandArgs返回的一个字符串中提取文件名.如果你看一下commandArgs的输出,你会看到文件名是第四个参数.参数记录为’–file = yourscript.R’,因此在上面的最后一行中,我将字符串拆分为’=’并拉出文件名.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读