Я пытаюсь проанализировать некоторые онлайн-данные о погоде с помощью 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, real(), n=1e6, size = 4, 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