自动保存和加载历史记录

时间:2013-05-24 12:25:38

标签: r history profile

我正在使用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进行的。任何帮助非常感谢!

4 个答案:

答案 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()的返回值
  • 与Hadley的回答相反,.Rhistory文件保存在当前目录中。 eval(bquote(... .(getwd()) ...))在启动期间评估getwd(),以便在启动时使用当前目录
  • 设置onexit = TRUE可确保代码实际运行

答案 2 :(得分:0)

如果您使用Rgui:savehistory()loadhistory()history()可以完成这项工作。否则我猜这取决于IDE ..

答案 3 :(得分:0)

您可以考虑使用emacs和ESS,它们可以在SSH上正常工作,并允许更常用(通常被认为更强大)的方法将有用的命令保存在单独的文件中。