14
當我運行...保存地塊在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]])]
從DT[...]
情節是正確的:
雖然重播是錯誤的:
在錄製的圖表中, x
和y
的最終值會神奇地應用於所有三個圖表,這可能是因爲data.table處理指向by=
組中定義的列的指針。
雖然我並不確定自己明白髮生了什麼,因爲我可以從表面上改變這個例子,編寫v = id2*1:10
而不是v = id*10 + id2*1:10
,並且 - poof - 問題消失。
我想知道(i)爲什麼會發生這種情況?(ii)我可以做些什麼簡單的調整?
不出所料,一種解決方法是確保通過使用'v + 0'代替'v'來傳遞變量。這是我會做的,直到我聽到更好的方式。 – Frank
當我運行這個代碼時,我得到了正常DT圖和記錄圖(都是錯誤的)的相同結果。但是,當我切換到'v = id2 * 1:10'時,我的確得到了正確的結果。 – takje
@takje嗯,我想知道我們是否有不同的版本或者什麼的。我使用R 3.2.4和data.table 1.10.4 – Frank