我想通過一個列表來循環使用子集data.table並通過幾行代碼運行結果。如果沒有for循環,使用變量子操作是完美的,但是當包含循環時它不能按預期工作。我想這個問題是由數據類型或範圍造成的。R:使用for循環和過濾器data.table
下面的代碼工作完美:
dt <- data.table(mpg)
list <- levels(dt$manufacturer)
dt[manufacturer==list[3]]
如果我再通過列表嘗試循環使用for循環:更新的代碼 - 解決]
for (var in list) {
subs <- data.table(melt(dt[manufacturer==var, list(model, hwy, cty)], id.vars='model'))
png(paste(var, 'png', sep='.'))
print(ggplot(subs, aes(model, value, col=variable)) + geom_point())
dev.off()
}
我不明白任何東西。
對我來說,代碼部分看起來完全相同,應該同樣工作。有沒有人有什麼建議可能會導致我沒有得到任何第二次過濾?任何幫助表示讚賞。
,如果你對你的最終目標闡述它一定會覺得很有益的。你想要做什麼?你最終的任務只是「打印」每個子集? – Arun
我想我的例子是足夠徹底的,因爲我想要使用數據表的子集,但不使用_apply或其他方法 - 如果這是你在之後。當我對錶格進行子集化時,我使用結果打印圖表。由於有很多子集,就像所有mpg數據集的製造商一樣,我認爲循環是最乾淨的方法。 – sgunnars
IIUC,那麼慣用的方法是'dt [,,by = manufacturer]' –
Arun