我有一个很大的(23 Mln行)ffdf表(tbl_ffdf),有10列,其中7个是因子,3个包含数字。它看起来是这样的:为什么在ffbase2(dplyr_ffbase)中总结显示“as.vmode.default()(list)对象中的错误不能被强制键入'double'”?
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")
在这里,在数据我们可以看出,x是data.frame F1值。而在回溯 - 功能
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,但想得到一个矩阵?..这是通常的原因“(列表)对象不能被强制键入'双''错误。
我不知道这个错误的真正原因是什么,以及如何解决它。请帮助! :-)
您是否在读取数据时使用'colClasses'?使用'lapply(TABLE_bad,class)'来找到它。 – Soheil 2015-04-02 16:57:38
@Soheil我在导入数据时没有使用colClasses,但是我后来手动创建了所有必需类型的列。例如,一些F1 ..F7是日期或数字与NAs某处,我使他们的因素与正确排列的级别和级别“NA”lapply(ok_ussd,class) $ virtual [1]“ff_vector”“ff” $ physical [1 “ff_vector”“ff” – inscaven 2015-04-03 06:21:19
对不起,编辑我自己的评论的时间已晚 更多信息可能是 '> lapply(colnames(TABLE_bad),function(x){class(TABLE_bad [,x])}) “因素”[[3]] [1]“因素”[[4]] [1]“因素”[[1]] [1]“数字”[[2]] [1] 5]] [1]“factor”' '[[6]] [1]“factor”[[7]] [1]“integer”[[8]] [1]“numeric”[[9]] [1]“integer”[[10]] [1]“logical”' 其实,F7是最后一列 - 这是合乎逻辑的。 – inscaven 2015-04-03 06:32:07