[問題] 讀取多年維度為矩陣的變數值(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)
[環境敘述]:

[關鍵字]:
多年資料 變數 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