我正在使用R软件进行统计分析,很遗憾它没有保留和恢复我的提示命令历史记录。实际上,按下新启动的交互式R会话上的向上箭头将每次显示空白历史记录。如果能够以类似于ipython
的方式执行此操作,那就太棒了。我试着将它放在我的.Rprofile
文件中无济于事。不会创建包含我的命令历史记录的文件。
.First <- function(){
if (!any(commandArgs()=='--no-readline') && interactive()){
require(utils)
try(loadhistory(Sys.getenv("R_HISTFILE")))
}
}
.Last <- function() {
if (!any(commandArgs()=='--no-readline') && interactive()){
require(utils)
try(savehistory(Sys.getenv("R_HISTFILE")))
}
}
当然,这一行出现在我的.bash_profile
export R_HISTFILE="$HOME/share/r_libs/.history"
所有这些都是在运行Linux的远程服务器上通过SSH进行的。任何帮助非常感谢!
答案 0 :(得分:10)
在~/.profile
我有:
export R_HISTFILE=~/.Rhistory
在~/.Rprofile
我有:
if (interactive()) {
.Last <- function() try(savehistory("~/.Rhistory"))
}
这对我有用(虽然如果你打开多个R会话,但效果不好)
答案 1 :(得分:1)
设置.Last
的另一种方法是为.GlobalEnv
注册终结器,即使R会话退出EOF( Ctrl + Z)也会运行终结器在Windows上, Ctrl + D 在其他地方):
if (interactive()) {
invisible(
reg.finalizer(
.GlobalEnv,
eval(bquote(function(e) try(savehistory(file.path(.(getwd()), ".Rhistory"))))),
onexit = TRUE))
}
这里有一些额外的花里胡哨:
invisible()
确保在R启动时不会打印reg.finalizer()
的返回值.Rhistory
文件保存在当前目录中。 eval(bquote(... .(getwd()) ...))
在启动期间评估getwd()
,以便在启动时使用当前目录onexit = TRUE
可确保代码实际运行答案 2 :(得分:0)
如果您使用Rgui:savehistory()
,loadhistory()
和history()
可以完成这项工作。否则我猜这取决于IDE ..
答案 3 :(得分:0)
您可以考虑使用emacs和ESS,它们可以在SSH上正常工作,并允许更常用(通常被认为更强大)的方法将有用的命令保存在单独的文件中。