2

我正在尝试在 PC 上使用 R 版本 2.14.0从 NOAA ( ftp://ftp.cpc.ncep.noaa.gov/wd53rl/cfsr/ ) 读取 .bin 文件。当我使用函数 readBin 读取文件时,值非常高(从 1e16 到 9e16),但不应高于 330。

我编写了下面的代码来下载包含信息的 .zip 文件(注意:数字 20130422 与日期相关,因此可能有其他日期可用)。

    file.name <- 'Data.zip' 
    file.URL <- 'ftp://ftp.cpc.ncep.noaa.gov/wd53rl/cfsr/cargill.20130422.zip' 
    download.file(file.URL,file.name) 

我手动解压缩文件并使用具有最高温度数据的文件(tmax.20130422.daily.latlon.bin)

然后,我写了一段代码来读取最高温度文件(720*720是我要读取的行数和列数):

    to.read <- 'tmax.20130422.daily.latlon.bin' 
    bin <- readBin(to.read, what = 'numeric',n = 720*720,endian='little') 

我尝试使用不同的“endian”或“what”,但对我没有任何帮助。如何从 bin 文件中提取正确的值?

谢谢,爱德华多

4

1 回答 1

0

我不确定你是否设法解决了这个问题,但我在 NOAA 数据方面遇到了类似的问题。我的数据是从 lat -40 到 40 和 lon -20 到 55,间距为 0.1 度。因此它有 751 列和 801 行。尽管 NOAA 说它是“小”端,但我发现“大”端适用于我的机器。此外,我必须翻转我的数据,以便矩阵与 R 读取并绘制它的方式相匹配。最后我覆盖了一张非洲地图,因为我的数据是非洲的降雨数据。我还安装了“raster”、“maps”和“mapdata”包。

以下是我的解决方案:

infile <- file("clim.bin.0101", "rb")
outfile <- matrix(readBin(infile, "numeric", 
                      n = 751 * 801, size = 4, 
                      endian = "big"), ncol= 751, 
              nrow = 801, byrow = TRUE);    
close(infile)
tran_outfile <- apply(outfile,2,rev) #flips the matirx so data is in correct order 
r = raster(tran_outfile)
extent(r) = extent(c(xmn=-20,xmx=55,ymn=-40,ymx=40))
plot(r)
plot(wrld_simpl, add=T)

希望有帮助

于 2013-12-16T13:46:58.640 回答