如何使'choose.dir'仅在用户第一次在R中运行函数时运行?
我在下面的简单函数中使用如何使'choose.dir'仅在用户第一次在R中运行函数时运行?,r,function,R,Function,我在下面的简单函数中使用choose.dir(),弹出一个windows类型屏幕,供用户为函数中生成的png文件选择一个工作目录 Pch = function(n = 5){ setwd(choose.dir()) ## How to make this run only the first time that user runs the function? for(i in 1:n) { png(paste0("plot_", i, ".png&q
choose.dir()
,弹出一个windows类型屏幕,供用户为函数中生成的png
文件选择一个工作目录
Pch = function(n = 5){
setwd(choose.dir()) ## How to make this run only the first time that user runs the function?
for(i in 1:n) {
png(paste0("plot_", i, ".png"), width = 1200, height = 1300, res = 200)
plot( rnorm(1e2) )
dev.off()
}
}
## TEST HERE:
Pch()
问题:
但是,我想知道如何让这个choose.dir()
仅在函数第一次运行时弹出?(并非每次用户都想运行该功能)
现在,每次我运行函数时都会弹出choose.dir()
窗口
Pch = function(n = 5){
setwd(choose.dir()) ## How to make this run only the first time that user runs the function?
for(i in 1:n) {
png(paste0("plot_", i, ".png"), width = 1200, height = 1300, res = 200)
plot( rnorm(1e2) )
dev.off()
}
}
## TEST HERE:
Pch()
您可以在全局环境中初始化标志,并在第一次调用函数时更改其值。然后让函数检查该标志,以查看函数在以下情况之前是否已被调用:
## Initialize flag in global environment:
.GlobalEnv$isDirChosen <- FALSE
Pch = function(n = 5){
## Check if function has been called before:
if (.GlobalEnv$isDirChosen == FALSE){
setwd(choose.dir()) ## How to make this run only the first time that user runs the function?
.GlobalEnv$isDirChosen <- TRUE ## Change value of flag
}
for(i in 1:n) {
png(paste0("plot_", i, ".png"), width = 1200, height = 1300, res = 200)
plot(rnorm(1e2))
dev.off()
}
}
## TEST HERE:
Pch()
您可能不应该在函数中设置工作目录。只需使用当前工作目录或让它们将(可选)目录路径作为参数传递给函数即可。编写函数时应尽量减少“副作用”。这将使你更容易以你可能没有预料到的方式写作。但是如果您坚持,请考虑使用
options()
来存储首选项。您的.GlobalEnv$pathForPlots
的值是多少?该文件夹是否已经存在?如果您不想在函数外部初始化.GlobalEnv$pathForPlots
,您可以通过检查变量是否存在,而不是检查它是否为NA
。我将相应地修改答案。谢谢!除了一件事,一切都很好。如果将参数n
设置为,例如,20
,该函数将生成20个png文件并将其存储在所选目录中。但是,如果在此之后,将n
更改为任何较小的数字,例如,10
,则该函数仅覆盖上一次运行的前10个png
文件!因此,您仍然可以在文件夹中看到20个png文件,这非常令人困惑。换句话说,我们需要函数在执行新的函数运行时清空文件夹!