我认为关键是将您的工作区加载到单独的环境中,然后弄清楚您希望如何合并它们(如果有的话)。
首先,让我们制作一些要保存的对象。
set.seed(1)
a <- data.frame(1:10, 1:10)
b <- rnorm(10)
跟踪对象创建时间的一种方法是设置属性。缺点是您必须记住在更新对象时更新它。(有关替代方案,请参阅帖子的最后一部分)
d <- structure(data.frame(b), updated=Sys.time())
attr(d, 'updated')
#[1] "2012-10-06 12:34:06 CDT"
您可以在保存工作空间之前将当前时间分配给一个变量,以了解您何时保存它(PeterMfile.info
建议可能是更好的选择)
updated <- Sys.time()
dir.create('~/tmp') # create a directory to save workspace in.
save.image('~/tmp/ws1.RData')
d[1, 1] <- 1 #make a change to `d`
attr(d, "updated") <- Sys.time() # don't forget to update the `updated` attribute
e <- b * a # add a new object
updated <- Sys.time()
save.image('~/tmp/ws2.RData')
现在清除工作区,并加载工作区。但是,不是将它们加载到 中,而是将它们.GlobalEnv
加载到自己的环境中
rm(list=ls(all=TRUE)) # clear .GlobalEnv
w1 <- new.env()
w2 <- new.env()
load('~/tmp/ws1.RData', envir=w1)
load('~/tmp/ws2.RData', envir=w2)
> ls(w1)
[1] "a" "b" "d" "updated"
> ls(w2)
[1] "a" "b" "d" "e" "updated"
> with(w1, updated)
[1] "2012-10-06 12:34:09 CDT"
> with(w2, updated)
[1] "2012-10-06 12:35:02 CDT"
> attr(w1$d, 'updated')
[1] "2012-10-06 12:34:06 CDT"
> attr(w2$d, 'updated')
[1] "2012-10-06 12:35:02 CDT"
您可能对类似的功能感兴趣.ls.objects
> .ls.objects(pos=w1)
Type Size PrettySize Rows Columns
a data.frame 872 [1] 872 10 2
b numeric 168 [1] 168 10 NA
d data.frame 1224 [1] 1224 10 1
updated POSIXct 312 [1] 312 1 NA
> .ls.objects(pos=w2)
Type Size PrettySize Rows Columns
a data.frame 872 [1] 872 10 2
b numeric 168 [1] 168 10 NA
d data.frame 1224 [1] 1224 10 1
e data.frame 1032 [1] 1032 10 2
updated POSIXct 312 [1] 312 1 NA
您可以使用自定义包装器assign
来跟踪对象的更新时间。
myAssign <- function(x, value, ...) {
attr(value, "updated") <- Sys.time()
assign(x, value, ...)
}
> myAssign("b", w1$b[1:2], pos=w1)
> w1$b
[1] -0.6264538 0.1836433
attr(,"updated")
[1] "2012-10-06 12:44:55 CDT"
最后,如果你想变得花哨,你可以做一个主动绑定,这样你的对象updated
在它改变时总是得到一个更新的属性。
f <- local({
delayedAssign('x', stop('object not found'))
function(v) {
if (!missing(v)) x <<- structure(v, updated=Sys.time())
x
}
})
makeActiveBinding('ab', f, .GlobalEnv)
> ab # Error, nothing has been assigned to it yet
Error in function (v) : object not found
> ab <- data.frame(1:10, y=rnorm(10))
> attr(ab, 'updated')
[1] "2012-10-06 12:46:53 CDT"
> ab <- data.frame(10:1, y=rnorm(10))
> attr(ab, 'updated')
[1] "2012-10-06 12:47:04 CDT"