重要なことは、ワークスペースを別々の環境にロードしてから、それらをマージする方法を理解することだと思います (もしあれば)。
まず、保存するオブジェクトをいくつか作成しましょう。
set.seed(1)
a <- data.frame(1:10, 1:10)
b <- rnorm(10)
オブジェクトがいつ作成されたかを追跡する 1 つの方法は、属性を設定することです。欠点は、オブジェクトを更新するときに忘れずに更新する必要があることです。(代替案については、投稿の最後の部分を参照してください)
d <- structure(data.frame(b), updated=Sys.time())
attr(d, 'updated')
#[1] "2012-10-06 12:34:06 CDT"
ワークスペースを保存する直前に現在の時間を変数に割り当てて、いつ保存したかを知ることができます ( PeterMが提案しfile.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"