我试图更好地掌握data.table包中的一些特殊变量是如何工作的.其中之一就是.BY声明.我没有看到很多人使用它的例子,但是文档暗示在绘图中很有用.
例如,下面的代码似乎工作得很好(显示每个物种的图,并为每个图分配正确的标题)data.table 1.9.3:
iris <- data.table(iris)
iris[,plot(Sepal.Length ~ Sepal.Width, main = unlist(.BY)), by = Species]
Run Code Online (Sandbox Code Playgroud)
虽然此代码不符合我的意图:
iris[ , plot(Sepal.Length ~ Sepal.Width, main = .BY), by = Species]
Run Code Online (Sandbox Code Playgroud)
为什么这两个不同?从评论来看,它似乎不是一个问题data.table 1.9.2.在其他方面使用该.BY声明可能有用吗?与.EACHI声明相比,这有何不同?
.BY是一个包含变量值的名称 。listby
传递未命名列表将main起作用,但是命名列表将失败(与data.table
plot(1, main = list(1))
# works....
plot(1, main = list(s=1))
# Error in title(...) : invalid graphics parameter
Run Code Online (Sandbox Code Playgroud)
最近对 data.table 1.9.3 进行了提交,修复了与“.BY Closes bug #5415”中的命名有关的错误。.BY在今年四月正确设置了名称属性。
如果你有超过 1 个“by”变量,你会希望能够连接一些如何
也许
iris[,plot(Sepal.Length~Sepal.Width,main=do.call(paste,.BY)),by=Species]
Run Code Online (Sandbox Code Playgroud)
会起作用(除非你有一个名为collapse!)
EACHI与此完全无关。请阅读data.table 1.9.3 的新闻以了解这一点。