作者AndrewShi (沒有妳的我)
看板R_Language
標題[問題] 讀取多年維度為矩陣的變數值(nc檔)
時間Thu Nov 22 18:43:24 2018
[問題類型]:
程式諮詢(我想用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檔
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.227.126
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1542883407.A.8AA.html
※ 編輯: AndrewShi (180.217.134.75), 11/22/2018 21:34:14
→ andrew43: 47年的資料嗎?雨量以雙精倍浮點數估算就要13GB記憶體 11/22 21:57
→ AndrewShi: 對,或許之後不一定會用到這麼長時間,但20~30年跑不 11/22 22:47
→ AndrewShi: 掉。 11/22 22:47
→ andrew43: memory.limit() 結果多少? 11/23 01:05
→ andrew43: 夠的話,看一下 ?memory.limit 來推敲 11/23 01:08
→ AndrewShi: 4010,這是指我的記憶體空間極限是4010Mb嗎?! 11/23 01:51
→ andrew43: 對啊。找台16GB以上ram的電腦做吧 11/23 01:52
→ andrew43: 4GB ram進OS後所剩不多吧,這個做不來 11/23 01:55
→ AndrewShi: 了解,所以只有換電腦記憶體的選擇一途囉?!我是有想到 11/23 02:54
→ AndrewShi: 可以把nc檔先轉成txt檔再轉成csv檔,這樣不知道會不會 11/23 02:54
→ AndrewShi: 比較不占記憶體的空間?! 11/23 02:54
→ andrew43: 讀到R中是浮點數(的話),都一樣,和先前資料儲存格式 11/23 07:24
→ andrew43: 無關。 11/23 07:24
→ andrew43: 資料讀入後的操作還可能需要資料量2倍的記憶體。總之你 11/23 07:27
→ andrew43: 的硬體遠遠不夠。 11/23 07:27
→ AndrewShi: 了解,謝謝andrew大的解答。 11/23 12:16