将图保存在data.table列列中

Fra*_*ank 14 plot r graph data.table

当我跑...

library(data.table)
DT = CJ(id = 1, id2 = 1:3)[, .(
    d = as.IDate("2017-01-01")+1:10, v = id*10 + id2*1:10
), by=.(id, id2)]

plotDT = DT[, {
    par(mfrow = c(uniqueN(id2), 1), mar = c(2,2,.5,2))
    .SD[,{ 
        plot(d, v, type="l")
    }, by=id2]
    .(p = .(recordPlot()))
}, by=id]

x11()
plotDT[id == 1L, replayPlot(p[[1]])]
Run Code Online (Sandbox Code Playgroud)

情节DT[...]是正确的:

虽然重播是错误的:

在recordedplot中,最终的值xy神奇地应用于所有三个图,可能是因为data.table处理指向by=组中定义的列的指针.

我不确定我是否理解发生了什么,因为我可以在表面上改变这个例子,写作v = id2*1:10而不是v = id*10 + id2*1:10- 噗 - 问题消失了.

我想知道(i)为什么会发生这种情况,以及(ii)我可以通过什么简单的调整来解决这个问题?

Fra*_*ank 2

j一种有效的技巧是这样写

with(copy(.SD), {yada yada})
Run Code Online (Sandbox Code Playgroud)

或类似的,这确保引用是针对每组副本的.SD,并且不会混淆。