我想在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
时,提示都会正确更新。我的问题是:是否有更优雅的方式动态更新提示,独立于我调用的函数而不必重新定义基本函数?
答案 0 :(得分:3)
因为prompt
选项实际上只是一个字符串,而没有在内部评估任何特殊指令(与shell提示不同),如果更改工作目录以获取当前工作目录,则必须更改它。
您使用的解决方案对我来说似乎是最好的。有点hacky,但任何解决方案都将是你想要实现R本身不支持的非常基本的东西。
此外,您不必担心在引擎盖下执行base::setwd
的功能,这会使您的提示与实际工作目录不同步。这在实践中不会发生。正如Thomas在评论中指出的那样,可能没有基本函数(source
除外)call setwd
。唯一的功能与包构建和安装有关。我注意到即使在source
中,通常在其他函数中,setwd
也像owd <- setwd(dir); on.exit(setwd(owd))
一样使用,因此当函数完成时,工作目录将被设置回原始状态。