【问题标题】:masking conflicts掩盖冲突
【发布时间】:2011-10-15 04:05:52
【问题描述】:

当用sqldf 加载.csv 时,一切正常,直到我加载data.table。例如:

library(sqldf)
write.table(trees, file="trees.csv", row.names=FALSE, col.names=FALSE, sep=",")
my.df <- read.csv.sql("trees.csv", "select * from file", 
        header = FALSE, row.names = FALSE)

工作,而

library(data.table)
my.df <- read.csv.sql("trees.csv", "select * from file", 
        header = FALSE, row.names = FALSE)
# Error in list(...)[[1]] : subscript out of bounds

没有。加载时,data.table 会通知您

The following object(s) are masked from 'package:base':

   cbind, rbind

所以,我尝试了这个

rbind <- base::rbind  # `unmask` rbind from base::
library(data.table)
my.df <- read.csv.sql("trees.csv", "select * from file", 
        header = FALSE, row.names = FALSE)
rbind <- data.table::rbind # `mask` rbind with data.table::rbind

有效。在我用这个技巧乱扔所有代码之前:

在 R 中处理屏蔽冲突的最佳实践解决方案是什么?

编辑:有一个密切相关的线程here,但没有建议通用的解决方案。

【问题讨论】:

  • data.table 的维护者提交错误报告是我的建议。
  • 我同意 @baptiste data.table 不应该破坏 R 的基本部分,例如 rbind。可以用其他东西替换rbind,只要它像原来的一样工作。但是,我会确认错误来自对 rbind() 的调用——只是为了确定——在向 data.table 的维护者提交错误报告之前。
  • data.table 项目有一个 r-forge 邮件列表,这是一个合适的帖子。他们的“帮助-帮助”网页说他们没有可以审查非订阅者发帖的版主:lists.r-forge.r-project.org/mailman/listinfo/datatable-help,所以你需要先订阅。 (但是,我认为 Matthew Dowle 不会介意错误报告。他在响应用户输入时非常公平。)
  • @RYogi, (1) 每次你想使用sqldf 发出detach() 假设data.table 是你附加的最后一个包。如果这不起作用,请尝试卸载它,即detach(unload = TRUE)。一旦您再次阅读了您的数据问题library(data.table)。 (2) 您也可以在 R 2.14 和 R 2.15 中尝试您的原始代码,因为 R 处理此类冲突的方式发生了一些变化,并且可能是 R 以您在那些较新版本中想要的方式自动处理。
  • @RYogi,(3) 我注意到您的原始代码确实适用于 R-Forge 版本的 data.table。

标签: r data.table


【解决方案1】:

根据 cmets,是的,请提交错误报告:

bug.report(package="data.table")

这样它就不会被遗忘,每次状态更改时您都会收到一封自动电子邮件,如果修复不充分,您可以重新打开它。

编辑:

现在在 R-Forge 上的 v1.6.7 中:

  • 修复了与包 sqldf(可以在空的... 上调用do.call("rbind",...))的兼容性并添加了测试。 data.table 正在打开 list(...)[[1]] 而不是 ..1。感谢 RYogi 报告 #1623。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2016-10-24
    • 2013-04-14
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多