我在R中有一个程序。有时当我保存历史记录时,它们不会写入我的历史记录文件。我失去了一些历史,这真的让我发疯。
有关如何避免此事的任何建议吗?
答案 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