R иногда не спасает мою историю - PullRequest
6 голосов
/ 12 апреля 2011

У меня есть программа на R. Иногда, когда я сохраняю историю, они не записывают в мой файл истории.Я потерял несколько историй несколько раз, и это действительно сводит меня с ума.

Любая рекомендация, как этого избежать?

Ответы [ 3 ]

7 голосов
/ 12 апреля 2011

Сначала проверьте ваш рабочий каталог (getwd()).savehistory() сохраняет историю в текущем рабочем каталоге.И если честно, вам лучше указать имя файла, так как по умолчанию это .History.Скажите:

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

, что позволяет вам:

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

Таким образом, история не потеряна, она просто находится в месте и под именем, которое вы не знали.См. Также ?history.

Для пояснения: история - это не более, чем текстовый файл, содержащий все команды текущего сеанса.Так что это хороший журнал того, что вы сделали, но я почти никогда им не пользуюсь.Я сам создаю свой «журнал анализа», используя сценарии, как подсказано в другом ответе.

1 голос
/ 12 апреля 2011

@ Stedy предоставил работоспособное решение вашего неотложного вопроса.Я бы посоветовал вам узнать, как использовать файлы .R и соответствующий текстовый редактор, или использовать интегрированную среду разработки (см. эту страницу SO для предложений).Затем вы можете source() в своем файле .R, чтобы вы могли последовательно копировать свой анализ.

Для еще лучшей тиражируемости потратьте время на изучение Sweave.Вы будете рады, что сделали.

0 голосов
/ 24 июля 2015

Регулярное ведение журнала на ** устаревших * файлах очень удобно.Пакет 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, файлы журнала не будут конфликтовать, если вы не запустите несколько интерактивных сеансов в одну секунду).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...