gpt4 book ai didi

r - 在 R 中,使用工作目录等设置临时执行操作

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

我几乎可以肯定我已经在某处阅读过如何做到这一点。不必将当前选项(例如工作目录)保存到变量,而是更改 w.d,执行操作,然后恢复到原来的状态,在类似于“with”的函数中执行此操作相对于附加/分离。我现在需要一个仅适用于工作目录的解决方案,但可能有一个更通用的函数来做那种事情?或者不是吗?

所以为了说明......现在的方式:

curdir <- getwd()
setwd("../some/place")
# some operation
setwd(curdir)

它在我最疯狂的梦想中的样子:
with.dir("../some/place", # some operation)

我知道我可以为此编写一个函数,我只是觉得有一些更容易获得并且可以推广到其他参数的东西。

谢谢

最佳答案

在一些 R 的基本绘图函数中有一个成语

op <- par(no.readonly = TRUE)

# par(blah = stuff)
# plot(stuff)

par(op)

它是如此的粗糙,以至于完全可以移植到 options()setwd() .

幸运的是,实现一个粗略的包装器也很容易:
with_dir <- function(dir, expr) {
old_wd <- getwd()
setwd(dir)
result <- evalq(expr)
setwd(old_wd)
result
}

我不是非标准评估的巫师,所以 evalq可能会以某种方式不稳定。更多关于 NSE 的信息在 an old write-up by Lumley还有 Wickham's Advanced R ,但它是密集的东西,我还没有完全理解它。

编辑:根据 Ben Bolker 的评论,最好使用 on.exit为了这:
with_dir <- function(dir, expr) {
old_wd <- getwd()
on.exit(setwd(old_wd))
setwd(dir)
evalq(expr)
}

从 R 文档:

on.exit records the expression given as its argument as needing to be executed when the current function exits (either naturally or as the result of an error). This is useful for resetting graphical parameters or performing other cleanup actions.

关于r - 在 R 中,使用工作目录等设置临时执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26825000/

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