如何在R提示符下显示工作目录?

时间:2014-08-05 10:02:31

标签: r command-prompt

我想在R控制台的提示符下看到当前的工作目录。使用options(prompt=paste(getwd(),">> "))时,会显示会话开始时的工作目录。但是当我在该会话期间更改工作目录时,它永远不会更新:

/home/sieste >> setwd("newdir")
/home/sieste >> cat("damn!\n")

我现在所做的是重新定义我的.Rprofile中的setwd函数

setwd <- function(...) {
  base::setwd(...)
  options(prompt=paste(getwd(),">> "))
}

现在,每当我致电setwd时,提示都会正确更新。我的问题是:是否有更优雅的方式动态更新提示,独立于我调用的函数而不必重新定义基本函数?

1 个答案:

答案 0 :(得分:3)

因为prompt选项实际上只是一个字符串,而没有在内部评估任何特殊指令(与shell提示不同),如果更改工作目录以获取当前工作目录,则必须更改它。

您使用的解决方案对我来说似乎是最好的。有点hacky,但任何解决方案都将是你想要实现R本身不支持的非常基本的东西。

此外,您不必担心在引擎盖下执行base::setwd的功能,这会使您的提示与实际工作目录不同步。这在实践中不会发生。正如Thomas在评论中指出的那样,可能没有基本函数(source除外)call setwd。唯一的功能与包构建和安装有关。我注意到即使在source中,通常在其他函数中,setwd也像owd <- setwd(dir); on.exit(setwd(owd))一样使用,因此当函数完成时,工作目录将被设置回原始状态。