在data.table包中使用.BY和.EACHI

时间:2014-06-11 01:05:24

标签: r data.table

我正在努力更好地了解data.table包中的某些特殊变量是如何工作的。其中之一是.BY声明。我没有看到很多人使用它的例子,但是文档暗示在绘图中很有用。

例如,以下代码在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语句相比,这有何不同?

1 个答案:

答案 0 :(得分: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的提交修复了在.BY中命名的错误 Closes bug #5415. .BY gets names attribute set properly今年4月。

如果你有超过1&#34; by&#34;变量,你希望能够连接一些如何

也许

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

将起作用(除非您有一个名为collapse的列!)

EACHI与此完全无关。请阅读NEWS for data.table 1.9.3以了解相关信息。