gpt4 book ai didi

r - 脚本如何在从命令行运行的 R 中找到自己?

转载 作者:行者123 更新时间:2023-12-04 12:22:11 26 4
gpt4 key购买 nike

我有一个脚本(称之为 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或看涨期权 RRscript我可以用它代替吗?

更具体地说,该解决方案需要在 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”,因此在上面的最后一行中,我将字符串拆分为“=”并拉出文件名。

关于r - 脚本如何在从命令行运行的 R 中找到自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13477852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com