[问题] 读取多年维度为矩阵的变量值(nc档)

楼主: AndrewShi (没有妳的我)   2018-11-22 18:43:24
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
各位大大好,小弟我想要将多年(10年以上)的区域(东亚)降雨资料读进R,并取出多年的
降雨值来做计算处理,而目前资料可以读的进R,但在取降雨这个变量的时候,R就跑出
内存不足的错误讯息,降雨值的资料为一矩阵(经度x纬度),经度总共360格,纬度共
280格(360*280),每一格皆有一降雨值,一天一个矩阵(平面),所以我在想有没有可能
真的是要取出来的降雨这个变量资料量太占内存,而造成没办法取出这么多年分的降
雨值出来,小弟我目前试我的电脑最多只能取出4年的降雨值出来,所以想请教各位大大
有没有什么方法可以解决吗??谢谢。
资料可从这里取得:http://0rz.tw/JI056 (APHRO这个档案)
[程式范例]:
rm(list=ls())
library(ncdf4)
Aphrodite_data <- "C:\\Users\\TOM\\Desktop\\R(数据库)\\Aphrodite资料
\\APHRO_MA_025deg_V1101R2.1961-2007\\APHRO_MA_025deg_V1101R2.1961-2007.nc"
obs <- nc_open(Aphrodite_data)
print(obs)
lon <- ncvar_get(obs,"lon")
lat <- ncvar_get(obs,"lat")
level <- ncvar_get(obs,"lev")
time <- ncvar_get(obs,"time")
tunits <- ncatt_get(obs, "time", "units")
precip <- ncvar_get(obs, "pr")
precip <- ncvar_get(obs, "pr",start=c(1,1,1,1),count=c(360,280,1,1460))
dim(precip)
nc_close(obs)
[环境叙述]:
https://imgur.com/kJiIoc7
[关键字]:
多年资料 变量 nc档
作者: andrew43 (讨厌有好心推文后删文者)   2018-11-22 21:57:00
47年的资料吗?雨量以双精倍浮点数估算就要13GB内存
楼主: AndrewShi (没有妳的我)   2018-11-22 22:47:00
对,或许之后不一定会用到这么长时间,但20~30年跑不掉。
作者: andrew43 (讨厌有好心推文后删文者)   2018-11-23 01:05:00
memory.limit() 结果多少?够的话,看一下 ?memory.limit 来推敲
楼主: AndrewShi (没有妳的我)   2018-11-23 01:51:00
4010,这是指我的内存空间极限是4010Mb吗?!
作者: andrew43 (讨厌有好心推文后删文者)   2018-11-23 01:52:00
对啊。找台16GB以上ram的电脑做吧4GB ram进OS后所剩不多吧,这个做不来
楼主: AndrewShi (没有妳的我)   2018-11-23 02:54:00
了解,所以只有换电脑内存的选择一途囉?!我是有想到可以把nc档先转成txt档再转成csv档,这样不知道会不会比较不占内存的空间?!
作者: andrew43 (讨厌有好心推文后删文者)   2018-11-23 07:24:00
读到R中是浮点数(的话),都一样,和先前资料储存格式无关。资料读入后的操作还可能需要资料量2倍的内存。总之你的硬件远远不够。
楼主: AndrewShi (没有妳的我)   2018-11-23 12:16:00
了解,谢谢andrew大的解答。

Links booklink

Contact Us: admin [ a t ] ucptt.com