我有一个包含 10 列的大型(2300 万行)ffdf 表(tbl_ffdf),其中 7 个是因子,3 个包含数字。它看起来像这样:
TABLE_bad
F1 F2 F3 F4 F5 F6 F7 N1 N2 N3
1111 01.15 05.14 busns AA 16 F 55.2 16165 0
1111 01.15 05.14 busns AA 16 F 12.5 0 4545
2222 12.14 11.14 privt KM 5 T 0.7 255 987777
2222 12.14 11.14 privt KM 5 T 111.6 7800 0
我想用 sum(Nx) 聚合数据以删除这种重复项并使我的表如下所示:
TABLE_ok
F1 F2 F3 F4 F5 F6 F7 N1 N2 N3
1111 01.15 05.14 busns AA 16 F 57.7 16165 4545
2222 12.14 11.14 privt KM 5 T 112.3 8055 987777
我正在使用从 github 安装的包 ffbase2(对于 ffdf 表来说是 dplyr)。我正在做以下事情:
TABLE_gr <- group_by(TABLE_bad, F1, F2, F3, F4, F5, F6, F7) # this step finishes OK
# in approximately 90 sec
TABLE_ok <- summarise(TABLE_gr, sN1 = sum(N1), sN2 = sum(N2), sN3 = sum(N3))
然后它工作〜10秒并说
Error in as.vmode.default(value, vmode) :
(list) object cannot be coerced to type 'double'
之后,它会根据我的 Rstudio 中的设置进入调试模式,他需要大约 3-5 分钟才能深入,停止挂起计算机并显示出错的功能代码:
function (x, ...)
UseMethod("as.vmode")
在 Data 中,我们可以看到 x 是 F1 值的 data.frame。在 Traceback - 函数中
eval(expr, envir, enclose)
`[<-`(`*tmp*`, ff::hi(N + 1, N + n), , value = -*etc*-
append_to(out, res, -*etc*-
summarise_.grouped_ffdf( -*etc*-
观察 ffbase2 的源代码并没有给我太多...我有类似方法 summarise_.grouped_ffdf 使用数据的递归切片,并且可能在最后一步它得到一些 data.frame 但想要得到一个矩阵?...这是“(列表)对象不能被强制输入'double'”错误的常见原因。
我不知道这个错误的真正原因是什么以及如何解决它。请帮忙!:-)