【发布时间】: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