【问题标题】:Conflict between data.table, readr, and dplyr? [closed]data.table、readr 和 dplyr 之间的冲突? [关闭]
【发布时间】:2015-06-08 19:43:55
【问题描述】:

我在 data.table (v 1.9.4)、dplyr (v 0.4.1) 和 readr (v 0.1.1) 包之间遇到了明显的冲突。我在 Windows 7 上使用 RStudio(版本 0.98.1103)和 R 版本 3.2.0。

使用以下代码将 data.table 加载到 R 时出现问题:

DT <- as.data.table(
      read_csv("my_file.csv", 
      col_types = list(Date1 = col_date(format = "%Y/%m/%d"), 
                       Date2 = col_date(format = "%Y/%m/%d")))
      )

文件似乎可以正常加载,并且 str(DT) 将表格报告为:

Classes ‘tbl_df’, ‘tbl’, ‘data.table’ and 'data.frame':

然而,当尝试使用 := 运算符分配值时,我收到以下错误消息:

Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, 
once only and in particular ways. See help(":=").

所以它似乎没有将其识别为 data.table。

同样,当我尝试使用 j 中的 .N 函数按年份字段计算记录时出现此错误:

Error in `[.tbl_df`(DT, , .N, keyby = Date1) : unused argument (keyby = Date1)

我不是一个非常老练的用户,所以我可能会遗漏一些简单的东西。我怀疑读者,因为它是最新的。然而,它需要 readr 加上 dplyr 才能得到错误。如果我只使用 data.table 和 readr 而不加载 dplyr,那么就没有问题。如果我在没有 readr 的情况下将数据加载到 R 中,即使加载了 readr,data.table 和 dplyr 也可以正常工作。

我显然可以解决这个问题,但想报告它。我喜欢 data.table 的语法,通常会使用 fread 来读取数据。我在这里使用 readr 是为了学习它,但也因为它能够处理日期和时间字段。我使用 dplyr 主要是因为它能够处理数据库。

最后,在几个星期没有动过这个项目后,我才再次拿起这个项目。我不记得以前出现过这个问题,还没有跟踪自那时以来哪些软件包已更新。

【问题讨论】:

  • 这是在data.table v 1.9.5 - github.com/Rdatatable/data.table/issues/1078 中处理的
  • 感谢您的回复,非常感谢。我确实尝试更新了所有三个包,并在 github 上看了一些,但显然还不够难。 . .干杯。
  • 再次感谢您的帮助。我想说现在关闭它有点为时过早。当 data.table v 1.9.5 通过 CRAN 可用时,我可以看到关闭它。不是每个人都会在那之前下载它。因为我在工作计算机上缺乏管理员权限,所以我就是这样的人。我仍在使用 v 1.9.4。

标签: r data.table dplyr


【解决方案1】:

感谢 Arun 指出这个问题是已知的,与 tbl_df 类有关,将在更新到 data.table 的 v 1.9.5 时得到修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2011-12-23
    • 2012-06-27
    相关资源
    最近更新 更多