【问题标题】:R sometimes does not save my historyR 有时不会保存我的历史记录
【发布时间】:2011-04-11 23:33:50
【问题描述】:

我在 R 中有一个程序。有时当我保存历史记录时,它们不会写入我的历史记录文件。我失去了一些历史几次,这真的让我发疯。

关于如何避免这种情况的任何建议?

【问题讨论】:

    标签: r


    【解决方案1】:

    首先检查您的工作目录 (getwd())。 savehistory() 将历史记录保存在当前工作目录中。老实说,你最好指定文件名,因为默认是.History。说:

    savehistory('C:/MyWorkingDir/MySession.RHistory')
    

    这允许您:

    loadhistory('C:/MyWorkingDir/MySession.RHistory')
    

    所以历史并没有丢失,它只是在一个你不知道的地方和名称下。另见?history

    澄清一下:历史只是一个包含当前会话所有命令的文本文件。所以这是一个很好的记录你所做的事情,但我几乎从不使用它。正如另一个答案所暗示的,我自己使用脚本构建了我的“分析日志”。

    【讨论】:

    • 历史帮助文件有一个“必备”功能,通过存储在 .RProfile 中的 .Last 函数自动保存历史记录。我非常依赖这个!
    • 乔里斯:我同意。最好使用我自己的脚本编辑器。 R 的历史记录面板会清除所有命令,无论错误与否。
    【解决方案2】:

    @Stedy 为您的直接问题提供了可行的解决方案。我鼓励您学习如何使用 .R 文件和适当的文本编辑器,或使用集成开发环境(有关建议,请参阅 this SO page)。然后,您可以在 .R 文件中source(),这样您就可以始终如一地复制您的分析。

    为了获得更好的可复制性,请花时间学习 Sweave。你会很高兴你这样做了。

    【讨论】:

      【解决方案3】:

      定期将控制台记录到 **dated* 文件非常方便。 TeachingDemos 包有一个很好的记录控制台会话的功能,但是它被编写为单例,这对于自动记录是有问题的,因为如果你使用它来记录你将无法使用该功能来创建教学演示.我通过一些元编程重新使用了该功能,以复制我包含在本地.Rprofile 中的.First 函数中的该功能,如下所示:

      .Logger <- (function(){
      
          # copy local versions of the txtStart,
          locStart  <-  TeachingDemos::txtStart
          locStop  <-  TeachingDemos::txtStop
          locR2txt  <-  TeachingDemos:::R2txt
      
          # creat a local environment and link it to each function
          .e.  <-  new.env()
          .e.$R2txt.vars <- new.env()
          environment(locStart) <- .e.
          environment(locStop) <- .e.
          environment(locR2txt) <- .e.
      
      
          # reference the local functions in the calls to `addTaskCallback`
          # and `removeTaskCallback`
          body(locStart)[[length(body(locStart))-1]] <- 
              substitute(addTaskCallback(locR2txt, name='locR2txt'))
          body(locStop)[[2]] <- 
              substitute(removeTaskCallback('locR2txt'))
      
      
          list(start=function(logDir){
                      op <- options()
                      locStart(file.path(logDir,format(Sys.time(), "%Y_%m_%d_%H_%M_%S.txt")),
                               results=FALSE)
                      options(op)
          }, stop = function(){
                      op <- options()
                      locStop()
                      options(op)
          })
      
      })()
      
      
      
      .First <- function(){
      
          if( interactive() ){
      
              # JUST FOR FUN
              cat("\nWelcome",Sys.info()['login'],"at", date(), "\n")
              if('fortunes' %in% utils::installed.packages()[,1] )
                  print(fortunes::fortune())
      
              # CONSTANTS
              TIME  <-  Sys.time()
              logDir  <- "~/temp/Rconsole.logfiles" 
      
              # CREATE THE TEMP DIRECORY IF IT DOES NOT ALREADY EXIST
              dir.create(logDir, showWarnings = FALSE)
      
              # DELETE FILES OLDER THAN A WEEK
              for(fname in list.files(logDir))
                  if(difftime(TIME, 
                              file.info(file.path(logDir,fname))$mtime,
                              units="days") > 7 ) 
                      file.remove(file.path(logDir,fname))
      
              # sink() A COPY OF THE TERMINAL OUTPUT TO A DATED LOG FILE
              if('TeachingDemos' %in% utils::installed.packages()[,1] )
                  .Logger$start(logDir)
              else 
                  cat('install package `TeachingDemos` to enable console logging')
          }
      
      }
      
      .Last  <-  function(){
          .Logger$stop()
      }
      

      这会导致将终端内容的副本复制到有日期的日志文件中。拥有过时文件的好处是,如果您使用多个 R 会话,日志文件不会发生冲突,除非您在同一秒内启动多个交互式会话。

      【讨论】:

        【解决方案4】:

        检查 Rstudio_Desktop/history_database 文件 - 它存储任何工作目录的每个命令。更多详情请看这里https://www.develop-bugs.com/article/18962623/How+to+save+the+whole+history+of+a+specific+day+from+RStudio+to+a+file

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-20
          • 2018-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-11
          相关资源
          最近更新 更多