R有时不保存我的历史

时间:2011-04-11 23:33:50

标签: r

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

有关如何避免此事的任何建议吗?

4 个答案:

答案 0 :(得分:7)

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

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

允许您:

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

所以历史不会丢失,它只是在一个你不知道的地方。另请参阅?history

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

.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会话,日志文件将不会发生冲突,除非您在同一秒内启动多个交互式会话。)

答案 3 :(得分:0)

检查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