我有一個很大的(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