我有一个简单的二进制结构,有几个重复的数据类型,我需要在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) –