我想在我的R控制台的提示符中看到当前的工作目录.options(prompt=paste(getwd(),">> "))显示在会话开始时使用工作目录时.但是当我在该会话期间更改工作目录时,它永远不会更新:
/home/sieste >> setwd("newdir")
/home/sieste >> cat("damn!\n")
Run Code Online (Sandbox Code Playgroud)
我现在所做的是重新定义setwd我的.Rprofile中的函数
setwd <- function(...) {
base::setwd(...)
options(prompt=paste(getwd(),">> "))
}
Run Code Online (Sandbox Code Playgroud)
现在,只要我打电话,提示就会正确更新setwd.我的问题是:是否有更优雅的方式动态更新提示,独立于我调用哪个函数而无需重新定义基本函数?
因为promptoption 实际上只是一个字符串,内部没有评估任何特殊指令(与 shell 提示符不同),所以如果更改工作目录以获取内部当前工作目录,则必须更改它。
您使用的解决方案对我来说似乎是最好的。有点 hacky,但是任何解决方案都将是因为您想要实现 R 本身不支持的非常基本的东西。
\n\n此外,您不必担心base::setwd在幕后执行的函数,这将使您的提示与实际工作目录不同步。这在实践中不会发生。正如托马斯在评论中指出的那样,可能没有基本函数(除了source)调用setwd。唯一起作用的功能与包构建和安装有关。我注意到,即使在source其他函数中并且通常在其他函数中,setwd也像 一样使用owd <- setwd(dir); on.exit(setwd(owd)),以便在函数完成时将工作目录设置回原始目录。