【问题标题】:Changing working directory inside a function更改函数内的工作目录
【发布时间】:2016-10-13 17:09:16
【问题描述】:

我想将目录名称作为函数的形式参数传递。在函数内部,我想将我的工作目录更改为正式参数中提到的目录。 该目录当前位于我的工作目录中。

注意:

specdata 是我当前 wd 中的目录

代码:

 x <-function(directory)
 {
 y<-file.path(getwd(),directory)
 setwd(y)
 }

 x(specdata)

这似乎不起作用,我不想输入 "specdata" 作为函数参数。它应该是 not be in double quotes

【问题讨论】:

  • 您反对使用x("specdata") 吗?几乎可以肯定,使用引号比编写不带引号的解决方案更简单。

标签: r function working-directory


【解决方案1】:

我不知道您为什么要避免使用双引号,因为您没有解释上下文。但是如果这确实是你需要的,那么你可以使用非标准的评估来实现这一点。

x <-function(directory) { 
  directory <- as.character(substitute(directory))
  y <-file.path(getwd(),directory) 
  setwd(y) 
  }

as.character(substitute()) 的使用正是如此,例如,函数 library() 允许一个或没有引号(在库函数中执行此操作的实际行是 package &lt;- as.character(substitute(package))。)

【讨论】:

  • 为了避免以后出现问题,该函数也应该包含orig_wd &lt;- getwd(); on.exit(setwd(orig_wd))
  • @Benjamin 我不确定我是否理解这样做的必要性。由于该函数的目的是更改工作目录的副作用,因此在退出时撤消此效果似乎无法达到目的。
  • 我想这取决于函数在做什么。如果这是一个你可以在同一个程序中调用两次的函数,那么它可能会在第二次调用时失败。如果唯一目的是更改工作目录,则没有必要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
相关资源
最近更新 更多