我有一個簡單的二進制結構,有幾個重複的數據類型,我需要在R有效讀取。例如,整數icount
,後面是結構{a integer, b real}
,重複icount
次。例如,考慮由Python編寫的這個簡單的文件: 在R讀取二進制結構
# Python -- this is not my question, it just makes data for my question
from struct import pack
with open('foo.bin', 'wb') as fp:
icount = 123456
fp.write(pack('i', icount))
for i in range(icount):
fp.write(pack('if', i, i * 100.0))
(你可以download this <1 MB file,如果你不希望產生的話)
要讀取該文件到[R,我可以使用readBin
在for循環,但它是痛苦慢(如預期):
# R
fp <- file("foo.bin", "rb")
icount <- readBin(fp, "integer", size=4)
df <- data.frame(a=integer(icount), b=numeric(icount))
for (i in seq(icount)) {
df$a[i] <- readBin(fp, "integer", size=4)
df$b[i] <- readBin(fp, "numeric", size=4)
}
close(fp)
我想知道一個更有效的方法來的將非均勻二進制結構讀取爲data.frame
結構(或類似結構)。如果可能,我知道應始終避免使用for-loops。
我還沒有使用它,但'包:: unpack'宣稱能夠根據模板來解壓原始載體。 – r2evans
你能分享一下數據的樣子嗎? – TUSHAr
@Tushar您可以生成它或[下載](http://filebin.ca/3E2SWO2QJvHu/foo.bin) –