gpt4 book ai didi

r - 获取当前脚本的路径

转载 作者:行者123 更新时间:2023-12-02 05:09:40 33 4
gpt4 key购买 nike

我想以编程方式将工作目录设置为当前脚本的路径,但首先我需要获取当前脚本的路径。

所以我希望能够做到:

current_path = ...retrieve the path of current script ...
setwd(current_path)

就像 RStudio 菜单一样: RStudio set working directory

到目前为止我尝试过:

initial.options <- commandArgs(trailingOnly = FALSE)
file.arg.name <- "--file="
script.name <- sub(file.arg.name, "", initial.options[grep(file.arg.name, initial.options)])
script.basename <- dirname(script.name)

script.name returns NULL

source("script.R", chdir = TRUE)

Returns: Error in file(filename, "r", encoding = encoding) : cannot open the connection In addition: Warning message: In file(filename, "r", encoding = encoding) : cannot open file '/script.R': No such file or directory

dirname(parent.frame(2)$ofile)

Returns: Error in dirname(parent.frame(2)$ofile) : a character vector argument expected ...because parent.frame is null

frame_files <- lapply(sys.frames(), function(x) x$ofile)
frame_files <- Filter(Negate(is.null), frame_files)
PATH <- dirname(frame_files[[length(frame_files)]])

Returns: Null because frame_files is a list of 0

thisFile <- function() {
cmdArgs <- commandArgs(trailingOnly = FALSE)
needle <- "--file="
match <- grep(needle, cmdArgs)
if (length(match) > 0) {
# Rscript
return(normalizePath(sub(needle, "", cmdArgs[match])))
} else {
# 'source'd via R console
return(normalizePath(sys.frames()[[1]]$ofile))
}
}

Returns: Error in path.expand(path) : invalid 'path' argument

我还看到了 here 的所有答案, here , herehere 。没有喜悦。

使用RStudio 1.1.383

EDIT: It would be great if there was no need for an external library to achieve this.

最佳答案

在 RStudio 中,您可以使用以下命令获取当前在源 Pane 中显示的文件的路径

rstudioapi::getSourceEditorContext()$path

如果您只需要目录,请使用

dirname(rstudioapi::getSourceEditorContext()$path)

如果您想要由 source(filename) 运行的文件的名称,那就有点困难了。您需要在堆栈后面的某个位置查找变量srcfile。向后退多远取决于您如何编写内容,但大约向后退 4 步:例如,

fi <- tempfile()
writeLines("f()", fi)
f <- function() print(sys.frame(-4)$srcfile)
source(fi)
fi

应该在最后两行打印相同的内容。

关于r - 获取当前脚本的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47044068/

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