gpt4 book ai didi

r - 将绘图保存在 data.table 列表列中

转载 作者:行者123 更新时间:2023-12-03 22:43:00 24 4
gpt4 key购买 nike

当我跑...

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]])]

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



虽然重播是错误的:



在记录图中, x 的最终值和 y神奇地应用于所有三个图形,可能是因为 data.table 如何处理指向 by= 中定义的列的指针组。

不过,我不确定我是否理解发生了什么,因为我可以从表面上更改示例,写作 v = id2*1:10而不是 v = id*10 + id2*1:10而且——噗——问题就消失了。

我想知道 (i) 为什么会发生这种情况以及 (ii) 我可以做哪些简单的调整来解决它?

最佳答案

一种可行的方法是编写 j喜欢

with(copy(.SD), {yada yada})

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

关于r - 将绘图保存在 data.table 列表列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42449257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com