【问题标题】:Use of .BY and .EACHI in the data.table package在 data.table 包中使用 .BY 和 .EACHI
【发布时间】:2014-06-11 01:05:23
【问题描述】:

我试图更好地了解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]

为什么这两个不同?从 cmets 来看,data.table 1.9.2 似乎不是问题。在哪些其他方面使用.BY 语句可能有用?这与.EACHI 语句相比有何不同?

【问题讨论】:

  • 我用你的两个陈述得到了相同的结果。应该有什么不同?
  • 有趣...我刚刚使用data.table 1.9.2 进行了尝试,得到了相同的结果(但标题分别为 1,2 和 3)。但是在 1.9.3 中,我得到了两段代码的不同结果(一段带有物种名称,另一段返回错误)。
  • 是的,我使用的是 1.9.2 - 可能值得编辑您的帖子以包含这是 1.9.3 中存在的问题。

标签: r data.table


【解决方案1】:

.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 今年四月。

如果您有超过 1 个“by”变量,您可能希望能够连接一些方式

也许

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

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

EACHI 与此完全无关。请阅读NEWS for data.table 1.9.3 了解这一点。

【讨论】:

    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多