簡體   English   中英

為什么在ffbase2(dplyr_ffbase)中的摘要顯示“無法將as.vmode.default()(列表)對象中的錯誤強制鍵入'double'”?

[英]Why summarise in ffbase2 (dplyr_ffbase) shows “error in as.vmode.default() (list) object cannot be coerced to type 'double'”?

我有一個很大的(23 Mln行)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     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是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'”錯誤的常見原因。

我不知道此錯誤的真正原因是什么以及如何解決。 請幫助! :-)

今天,我發現了錯誤所在。 summarise_.grouped_ffdf的源代碼部分如下所示:

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   }

此功能將數據按組切成小塊(第43行),並將常用的dplyr摘要應用於它們(第44行)。 然后將結果附加到輸出變量。 但是,查看append_to源向我們展示了,要正確附加變量, res必須是tbl_ffdf對象,但是這里有簡單的data.frame 因此,以以下方式修改文件manip-grouped-ffdf.r的第45行可以完全解決問題:

45     out <- append_to(out, tbl_ffdf(res), check_structure=FALSE) 

很好,但是在使用此摘要時,我遇到了內存不足的問題。 調查導致事實是因為grouped_chunks(.data) 我沒有弄清楚為什么會這樣以及在這里做什么,我只是在for循環中逐月對數據進行切片,然后將聚合后的塊彼此追加。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM