【发布时间】:2015-06-14 21:56:03
【问题描述】:
我在寻找 R 中的 gzfile 时遇到了麻烦。下面是一个示例:
set.seed(123)
m=data.frame(z=runif(10000),x=rnorm(10000))
write.csv(m,"m.csv")
system("gzip m.csv")
file.info("m.csv.gz")$size
[1] 195975
这创建了m.csv.gz,R 表示它可以寻求它,并且seek 的帮助似乎同意:
gzf=gzfile("m.csv.gz")
open(gzf,"rb")
isSeekable(gzf)
[1] TRUE
现在来回小跳似乎可以工作,但如果我尝试大跳,我会收到错误:
seek(gzf,10)
[1] 10
seek(gzf,20)
[1] 10
seek(gzf,10)
[1] 20
seek(gzf,1000)
[1] 100
Warning message:
In seek.connection(gzf, 1000) :
seek on a gzfile connection returned an internal error
但是,如果我重置连接并重新开始,如果我以 100 字节的步长进行,我可以达到 1000:
for(i in seq(100,1000,by=100)){seek(gzf,i)}
seek(gzf,NA)
[1] 1000
R 对在 Windows 中使用 seek 有一些严厉的措辞:“不鼓励在 Windows 上使用‘seek’。”但这是在 Linux 机器上(R 3.1.1,32 位)。 python 中使用gz 库的类似代码工作正常,到处寻找。
R 3.2.0 提供的信息略多:
Warning messages:
1: In seek.connection(gzf, 1000) : invalid or incomplete compressed data
2: In seek.connection(gzf, 1000) :
seek on a gzfile connection returned an internal error
想法?我现在已将此作为错误报告提交。
【问题讨论】: