将向量分配给data.table列时出现打印错误

为简洁而编辑:

我有一对预先分配的data.tables,每行有几万行,每行几列.我试图从一个表聚合一列,并将结果分配给另一个表.

问题是我在分配时收到以下错误:

Error in SYS[[length(SYS) - 3L]][[1L]] == "knit_print.default" : 
  comparison (1) is possible only for atomic and list types

代码本身不会崩溃,但是当我查看/打印返回值时,错误消息基本上取代了数据表.或者它似乎这样做.

谷歌搜索除了数据的Github源代码之外什么也找不到.所以我看了一下它,唯一相似的是45-50行,似乎是在就地分配期间抑制/延迟打印输出.我没有找到关于此错误的其他文档.

我还没有能够创建一个MRE(仍在尝试),因为剥离代码最终会得到工作示例,所以很明显我错过了破坏它的东西.我怀疑,如果我发现它,我将能够回答我自己的问题.

我发布这个是因为我希望有人在这里可能知道错误意味着什么,这将有助于我在我的代码中查明问题,并修复它或围绕它创建一个错误报告的MRE.

我已经确定源代码中的赋值失败(仅针对一个表,另一个表没有问题),但是中断执行并将相同的赋值复制到控制台中工作正常.所以它似乎不是我的语法或数据的问题.

更新:最小可重复示例

3天后,我确定了问题所在.

alloc_out <- function(annot = c("a", "b")) {
  Genes <- data.table("parent" = annot, flag = NA)
  ro <- structure(list("Genes" = Genes), class="dtu")
  ro$Genes[, flag := TRUE]  # This causes the error message 
                            # when executed from source, 
                            # but works in console.
  return(ro)
}

R版本:OSX El Capitan上的RStudio中的3.2.4 //
data.table版本:1.9.6

最佳答案 正如我所怀疑的那样,确定错误并创建MRE是相辅相成的(并按此顺序).

我的代码中的问题是由这一行引起的:

ro <- structure(list("Genes" = Genes), class="dtu")

具体由class属性.出于某种原因(从strucutre()的文档中不明显),该属性会破坏它.如果我省略属性赋值,一切都按预期工作.

这并没有真正解释为什么错误发生在更深层次上.正是在我的代码中导致它的原因.

点赞