如何解决R:读取压缩的二进制文件
我正在尝试使用R解析一些在线天气数据。该数据是已压缩的二进制文件。一个示例文件是:ftp://ftp.cpc.ncep.noaa.gov/precip/CPC_UNI_PRCP/GAUGE_GLB/V1.0/2005/PRCP_CU_GAUGE_V1.0GLB_0.50deg.lnx.20050101.gz
如果将文件下载到计算机上并手动解压缩,则可以轻松执行以下操作:
myFile <- ( \"/tmp/PRCP_CU_GAUGE_V1.0GLB_0.50deg.lnx.20050101\" )
to.read = file( myFile,\"rb\")
myPoints <- readBin(to.read,real(),n=1e6,size = 4,endian = \"little\")
我想做的是将下载和解压缩以及读取操作自动化。因此,我认为这将简单如下:
p <- gzcon( url( \"ftp://ftp.cpc.ncep.noaa.gov/precip/CPC_UNI_PRCP/GAUGE_GLB/V1.0/2005/PRCP_CU_GAUGE_V1.0GLB_0.50deg.lnx.20050101.gz\" ) )
myPoints <- readBin(p,endian = \"little\")
这似乎很花哨,但在手动步骤中,向量myPoints
的长度为518400,这是准确的。但是,如果R按照第二个示例中的说明进行下载和读取,则每次运行代码时,我都会得到一个不同的长度向量。说真的我什么都不抽。我发誓。我多次运行它,每次向量的长度不同,总是小于预期的518400。
我还尝试使用以下命令让R下载gzip文件:
temp <- tempfile()
myFile <- download.file(\"ftp://ftp.cpc.ncep.noaa.gov/precip/CPC_UNI_PRCP/GAUGE_GLB/V1.0/2005/PRCP_CU_GAUGE_V1.0GLB_0.50deg.lnx.20050101.gz\",temp)
我发现通常会返回有关文件大小不足的警告。如下所示:
Warning message:
In download.file(\"ftp://ftp.cpc.ncep.noaa.gov/precip/CPC_UNI_PRCP/GAUGE_GLB/V1.0/2005/PRCP_CU_GAUGE_V1.0GLB_0.50deg.lnx.20050101.gz\",:
downloaded length 162176 != reported length 179058
您有什么技巧可以帮助我解决此问题吗?
-J
解决方法
尝试这个:
R> remfname <- \"ftp://ftp.cpc.ncep.noaa.gov/precip/CPC_UNI_PRCP/GAUGE_GLB/V1.0/2005/PRCP_CU_GAUGE_V1.0GLB_0.50deg.lnx.20050101.gz\"
R> locfname <- \"/tmp/data.gz\"
R> download.file(remfname,locfname)
trying URL \'ftp://ftp.cpc.ncep.noaa.gov/precip/CPC_UNI_PRCP/GAUGE_GLB/V1.0/2005/PRCP_CU_GAUGE_V1.0GLB_0.50deg.lnx.20050101.gz\'
ftp data connection made,file length 179058 bytes
opened URL
==================================================
downloaded 174 Kb
R> con <- gzcon(file(locfname,\"rb\"))
R> myPoints <- readBin(con,real(),n=1e6,size = 4,endian = \"little\")
R> close(con)
R> str(myPoints)
num [1:518400] 0 0 0 0 0 0 0 0 0 0 ...
R>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。