2014-06-11 34 views
5

我想更好地瞭解data.table包中的某些特殊變量如何工作。其中之一是.BY聲明。我還沒有看到很多使用它的人的例子,但是文檔意味着它在繪圖中很有用。在data.table包中使用.BY和.EACHI

例如,下面的代碼看起來工作得很好(顯示每個物種的情節和分配權標題到每個情節)在data.table 1.9.3

iris <- data.table(iris) 
iris[,plot(Sepal.Length ~ Sepal.Width, main = unlist(.BY)), by = Species] 

儘管此代碼不能作爲工作打算由我:

iris[ , plot(Sepal.Length ~ Sepal.Width, main = .BY), by = Species] 

這兩個爲什麼不同?從評論看,data.table 1.9.2似乎並不是一個問題。使用.BY聲明還有哪些其他方法可能有用?與.EACHI聲明相比,這有什麼不同?

+0

我使用你的兩條語句得到相同的結果。什麼應該是不同的? – thelatemail

+1

有意思......我只是用''data.table'''試過這個1.9.2,我得到了相同的結果(但是標題是1,2和3)。但在1.9.3中,我得到了兩段代碼的不同結果(一個帶有Species名稱,另一個返回錯誤)。 –

+2

是的,我正在使用1.9.2 - 可能值得編輯您的帖子,以包括這是1.9.3中存在的問題。 – thelatemail

回答

4

.BY是一個名爲list包含by變量的值。

傳遞一個不願透露姓名的列表main將工作,然而命名名單將失敗(完全無關data.table

plot(1, main = list(1)) 
# works.... 
plot(1, main = list(s=1)) 
# Error in title(...) : invalid graphics parameter 

有一個最近承諾data.table 1.9.3它修正了一個錯誤,以就今年的'。通過 Closes bug #5415. .BY gets names attribute set properly在四月命名。

如果你有超過1「的」變量,你會希望能夠來連接一些如何

也許

iris[,plot(Sepal.Length~Sepal.Width,main=do.call(paste,.BY)),by=Species] 

將工作(除非你有一個叫collapse列!)

EACHI是完全無關的這一點。請閱讀NEWS for data.table 1.9.3瞭解這一點。