我发现一个奇怪的问题,在另一台机器上运行我的 R 程序时。当我尝试运行 data.table 的 join 操作
为了强制 R 使用 data.table 的方括号函数,我想显式地调用该函数,但我不知道如何操作。
以下是我尝试过的方法。
df1[df2]
时,会报错:
我猜测是因为在另一台机器上,R 环境找不到 data.table 的方括号函数(尽管我已经加载了库)。Error in `[.default`(x, i) : invalid subscript type 'list'
为了强制 R 使用 data.table 的方括号函数,我想显式地调用该函数,但我不知道如何操作。
以下是我尝试过的方法。
library(data.table)
df1 <- data.frame(a = c("a1","a2","a3"), n = c(1,2,3), b = c(T,T,T))
df2 <- data.frame(a = c("a1","a2","a3"), n = c(1,2,3), b = c(F,T,F))
df1 <- data.table(df1)
df2 <- data.table(df2)
setkey(df1,a,n,b)
setkey(df2,a,n,b)
df1[df2] # produces `[.default`(x, i) : invalid subscript type 'list'
# my tries to call `[.data.table` explicitly all produce errors
`[.data.table`(df1, df2)
data.table::`[.data.table`(df1, df2)
data.table::`[`(df1, df2)
我该如何显式地使用data.table包中的括号函数(bracket function)?
编辑:
好的,我试图找到错误的根本原因。我正在使用R版本3.2.1。
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.9.2 mypackage_1.0 ROracle_1.1-10 DBI_0.2-7
loaded via a namespace (and not attached):
[1] plyr_1.8.1 reshape2_1.4 Rcpp_0.11.2 stringr_0.6.2
is.data.table
会在调用 df1[df2]
之前同时在 df1 和 df2 上返回 TRUE
(我是通过代码进行调试的)。
包含代码行 df1[df2]
的函数位于 mypackage_1.0 中(我正在开发一个包)。我注意到,如果逐行运行代码,而不是调用我的包函数并进行调试,则代码能够按预期工作。因此,我认为包中可能存在问题。在 DESCRIPTION 文件中,我仅在“建议”下导入了 data.table 包。这可能与此有关吗?
df1
不是一个数据表格(data.table)。请提供你的sessionInfo
。(我在我的机器上无法重现这个错误。) - Rolanddf1[df2]
(在您的真实数据集上)之前,请检查is.data.table(df1)
的输出。我有一种感觉,您在这里打错了一些字。顺便说一下,您可以直接创建并设置data.table
的键。尝试使用df1 <- data.table(a = c("a1","a2","a3"), n = c(1,2,3), b = c(T,T,T), key = "a,n,b")
。 - David Arenburgdt1
或dt2
而不是df1
或df2
。也许可以使用setDT(df1)
函数来代替? - Simon O'Hanlon