【发布时间】:2011-04-11 23:33:50
【问题描述】:
我在 R 中有一个程序。有时当我保存历史记录时,它们不会写入我的历史记录文件。我失去了一些历史几次,这真的让我发疯。
关于如何避免这种情况的任何建议?
【问题讨论】:
标签: r
我在 R 中有一个程序。有时当我保存历史记录时,它们不会写入我的历史记录文件。我失去了一些历史几次,这真的让我发疯。
关于如何避免这种情况的任何建议?
【问题讨论】:
标签: r
首先检查您的工作目录 (getwd())。 savehistory() 将历史记录保存在当前工作目录中。老实说,你最好指定文件名,因为默认是.History。说:
savehistory('C:/MyWorkingDir/MySession.RHistory')
这允许您:
loadhistory('C:/MyWorkingDir/MySession.RHistory')
所以历史并没有丢失,它只是在一个你不知道的地方和名称下。另见?history。
澄清一下:历史只是一个包含当前会话所有命令的文本文件。所以这是一个很好的记录你所做的事情,但我几乎从不使用它。正如另一个答案所暗示的,我自己使用脚本构建了我的“分析日志”。
【讨论】:
@Stedy 为您的直接问题提供了可行的解决方案。我鼓励您学习如何使用 .R 文件和适当的文本编辑器,或使用集成开发环境(有关建议,请参阅 this SO page)。然后,您可以在 .R 文件中source(),这样您就可以始终如一地复制您的分析。
为了获得更好的可复制性,请花时间学习 Sweave。你会很高兴你这样做了。
【讨论】:
定期将控制台记录到 **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 会话,日志文件不会发生冲突,除非您在同一秒内启动多个交互式会话。
【讨论】:
检查 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
【讨论】: