为什么在ffbase2(dplyr_ffbase)节目中进行总结;无法将as.vmode.default()(list)对象中的错误强制为类型';双倍'&引用;?
我有一个大的(23000000行)ffdf表(tbl_ffdf),有10列,其中7列是因子,3列包含数字。它看起来像这样:为什么在ffbase2(dplyr_ffbase)节目中进行总结;无法将as.vmode.default()(list)对象中的错误强制为类型';双倍'&引用;?,r,dplyr,ff,ffbase,R,Dplyr,Ff,Ffbase,我有一个大的(23000000行)ffdf表(tbl_ffdf),有10列,其中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 1
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
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
42 for (i in grouped_chunks(.data)){
43 ch <- grouped_df(data_s[i,,drop=FALSE], groups(.data))
44 res <- summarise_(ch, .dots = dots)
45 out <- append_to(out, res, check_structure=FALSE)
46 }
我希望使用sum(Nx)聚合数据,以删除此类重复项,并使我的表如下所示:
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
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
42 for (i in grouped_chunks(.data)){
43 ch <- grouped_df(data_s[i,,drop=FALSE], groups(.data))
44 res <- summarise_(ch, .dots = dots)
45 out <- append_to(out, res, check_structure=FALSE)
46 }
我使用的是从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))
之后,它会根据我的Rstudio中的设置进入调试模式,需要3-5分钟才能进入足够的深度,停止挂起计算机并显示出错的功能代码:
function (x, ...)
UseMethod("as.vmode")
在数据中,我们可以看到x是F1值的Data.frame。在回溯函数中
eval(expr, envir, enclose)
`[<-`(`*tmp*`, ff::hi(N + 1, N + n), , value = -*etc*-
append_to(out, res, -*etc*-
summarise_.grouped_ffdf( -*etc*-
eval(expr、envir、envir)
`[今天我发现了错误的原因。摘要.grouped\u ffdf
的源代码部分如下所示:
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
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
42 for (i in grouped_chunks(.data)){
43 ch <- grouped_df(data_s[i,,drop=FALSE], groups(.data))
44 res <- summarise_(ch, .dots = dots)
45 out <- append_to(out, res, check_structure=FALSE)
46 }
这很好,但在那之后,我在使用此摘要时遇到了内存不足的问题。调查发现,这是因为分组的_块(.data)
。我没有弄明白为什么会这样以及在这里要做什么,我只是在for循环中逐月对我的数据进行切片,然后将聚合块彼此附加。读取数据时是否使用了colClasses
?使用lappy(TABLE\u bad,class)
找到它。@Soheil我在导入数据时没有使用colClasses,但后来我手动制作了每一列必需的类型。例如,F1..F7中的一些是日期或带有NAs的数字,我用正确排列的级别和级别“NA”制作了它们的因子(ok_ussd,class)$virtual[1]“ff_vector”“ff”$physical[1] “ff_vector”“ff”
对不起,我编辑自己的评论迟到了。更多信息可能是>lappy(colnames(TABLE_bad),function(x){class(TABLE_bad[,x])}
[code>[1][1][1][1][3][1][1][4][1][5][1][1][1][1][1][8][1]“整数”[[10]][1]“逻辑”实际上,F7是最后一列-它是逻辑的。