我最近在R中使用'rhdf5'包,並發現它非常有用,直到我試圖讀取190Mb或更大的文件。特別是,我從數據庫中抓取數據,寫入HDF5格式(成功,無論大小),然後再讀回R。當我的文件大小超過190MB,我得到以下錯誤:在R中讀取大型HDF5文件
錯誤:段錯誤由C堆棧溢出
在我而言,這相當於一個數據幀,大約有195萬行。
在閱讀軟件包文檔時,我意識到分塊數據可能會解決問題。但是,分塊似乎不適用於複合數據幀。這裏有一些示例代碼:
# save a matrix with chunking: works
mat = cbind(1:10, 11:20)
h5createFile("test.h5")
h5createDataset(file="test.h5", dataset="dat", dim=c(10,2), chunk=c(5,2), level=7)
h5write(mat, file="test.h5", name="dat")
# convert to data frame: won't work now
df = as.data.frame(mat)
df[,2] = as.character(mat[,2])
h5createFile("test2.h5")
h5createDataset(file="test2.h5", dataset="dat", dim=c(10,2), chunk=c(5,2), level=7)
h5write(df, file="test2.h5", name="dat")
#h5write(df, file="test2.h5", name="dat", index=list(1:10, 1:2))
# try to use alternate function
fid = H5Fcreate("test3.h5")
h5createDataset(file="test3.h5", dataset="dat", dim=c(10,2), chunk=c(5,2), level=7)
h5writeDataset.data.frame(df, fid, name="dat", level=7, DataFrameAsCompound=FALSE)
#h5writeDataset.data.frame(df, fid, name="dat", level=7, DataFrameAsCompound=FALSE, index=list(1:10,1:2))
這可能是塊沒有幫助。無論哪種方式,如果有人對將大型HDF5文件讀入R有任何建議,我將不勝感激。
對於類似這樣的問題,看起來存在包裹的編碼問題,似乎包裹維護者是最好的聯繫人 - 他們會有興趣聽到和修復這一點。 'packageDescription( 'rhdf5')$ Maintainer' –