Re: [問題] 兩層for迴圈問題

看板R_Language作者 (討厭有好心推文後刪文者)時間7年前 (2018/06/06 11:08), 編輯推噓9(9022)
留言31則, 3人參與, 7年前最新討論串2/2 (看更多)
我不是很明白 nc 檔你想怎麼處理, 所以這篇只簡單說明一次讀入多個 nc 檔怎麼把它們「儲存在同一個 list 裡面」。 假設有 2 * 24 個 nc 檔案,檔名叫 01-00.nc 01-01.nc 01-02.nc ... 01-23.nc 02-00.nc ... 02-23.nc library(magrittr) library(stringr) library(ncdf4) dt <- data.frame( day = gl(2, 24, labels = (1:2) %>% str_pad(2, pad = "0")), hour = gl(24, 1, labels = (0:23) %>% str_pad(2, pad = "0")) ) dt$filename <- paste0(dt$day, "-", dt$hour, ".nc") nc.res <- vector("list", nrow(dt)) names(nc.res) <- dt$filename for(i in dt$filename){ nc.res[[i]] <- nc_open(i) } 則 nc.res 為所求,而 dt 可方便對照檔名與日期時間。 之後對 nc.res 的呼叫就和一般 list 一樣了, 例如 nc.res[[1]] 或 nc.res$`01-00.nc` 之類的。 你也可能需要用到 lapply() 方便操作 list。 ※ 引述《AndrewShi (沒有妳的我)》之銘言: : [問題類型]: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : [軟體熟悉度]: : 入門(寫過其他程式,只是對語法不熟悉) : [問題敘述]: : 我想要讀多筆名稱相近的時間資料(nc檔)進R,資料的時間長度為一小時一筆,而我想要 : 讀2天共48筆資料進R,因此需寫兩層for迴圈(分別為日期和小時),我的程式碼如下,雖然 : 過程中沒有出現error,但讀進來的資料日期和小時是交錯的(環境敘述中的圖,只有24筆 : )所以想請問該如何解決??謝謝。 : 資料名稱唯一的差別在於#precip那行的"01"(日期)和"00"(小時)。 : [程式範例]: : rm(list=ls()) : library(ncdf4) : day=c("01","02") : hour=c("00","01","02","03","04","05","06","07","08","09","10",11:23) : class(day) : class(hour) : nc<-list() : for(i in c(1:2)){ : for(j in c(0:23)){ : precip.file<-paste("C:\\Users\\TOM\\Desktop\\R(資料庫 : )\\201505\\gsmap_mvk.201505",paste(day[i=(1:2)]),paste("."), : paste(hour[j=(0:23)],paste("00.v6.4133.0.nc")),sep="") : #precip<-"C:\\Users\\TOM\\Desktop\\R(資料庫 : )\\20150501\\gsmap_mvk.201505"01"."00"00.v6.4133.0.nc" : #nc[i,j]=rbind(i,j) : } : i<-i+1 : nc[i,j]<-nc_open(precip.file) : } : precip.file : View(matrix(precip.file)) : [環境敘述]: : 執行畫面拍照截圖於推文中 : [關鍵字]: : 兩層for迴圈 nc檔 讀取多筆資料 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.222.1 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1528254529.A.9B0.html

06/06 17:34, 7年前 , 1F
謝謝andrew大~我會再好好研究的,不過我不太懂str_pad(
06/06 17:34, 1F

06/06 17:34, 7年前 , 2F
2,pad="0")這行是什麼意思??
06/06 17:34, 2F

06/06 18:00, 7年前 , 3F
補上前綴0。多練習自己看說明手冊 ?str_pad
06/06 18:00, 3F

06/06 18:05, 7年前 , 4F
另外想請問dt$filename裡沒有i這個變數名稱,最後在寫f
06/06 18:05, 4F

06/06 18:05, 7年前 , 5F
or迴圈讀資料進來的時候應該沒辦法讀吧?!(實際操作後
06/06 18:05, 5F

06/06 18:05, 7年前 , 6F
的確出現error,沒辦法讀進來)
06/06 18:05, 6F

06/06 18:21, 7年前 , 7F
我的for loop裡i就是一次一次的dt$filename沒錯
06/06 18:21, 7F

06/06 18:22, 7年前 , 8F
你要怎麼讓for loop運作可自行調整
06/06 18:22, 8F

06/06 19:33, 7年前 , 9F
如果要讀多檔,可先存檔名再迴圈讀檔,關鍵字:file.list
06/06 19:33, 9F

06/06 21:55, 7年前 , 10F
好的,我再研究看看,謝謝你們~
06/06 21:55, 10F

06/10 01:09, 7年前 , 11F
andrew大~我改成這樣但好像也只有讀到最後一筆資料,
06/10 01:09, 11F

06/10 01:09, 7年前 , 12F
能否請你再次指點我改如何改才能完整的把48筆資料都讀
06/10 01:09, 12F

06/10 01:09, 7年前 , 13F
進來呢??謝謝。
06/10 01:09, 13F

06/10 01:09, 7年前 , 14F

06/10 22:08, 7年前 , 15F
nc.res 後面要雙重中跨號
06/10 22:08, 15F

06/10 22:08, 7年前 , 16F
他是一個list。
06/10 22:08, 16F

06/10 22:19, 7年前 , 17F
還有問題可以回文並附上可重複問題的code,推文太久會
06/10 22:19, 17F

06/10 22:19, 7年前 , 18F
漏看。
06/10 22:19, 18F

06/11 02:20, 7年前 , 19F
了解,我解決了,忘記print也要放在for迴圈裡,謝謝and
06/11 02:20, 19F

06/11 02:20, 7年前 , 20F
rew大~另外可以請教andrew大,gl指令(我有看說明)和寫f
06/11 02:20, 20F

06/11 02:20, 7年前 , 21F
or迴圈的意思(重複動作)是差不多的嗎?!如果是差不多的
06/11 02:20, 21F

06/11 02:20, 7年前 , 22F
,能否順便想請問你我最一開始的code可以經過修改而達
06/11 02:20, 22F

06/11 02:20, 7年前 , 23F
到同樣的功用嗎??謝謝。
06/11 02:20, 23F

06/11 08:04, 7年前 , 24F
你看過說明手冊嗎? 輸入 ?gl
06/11 08:04, 24F

06/11 17:28, 7年前 , 25F
有~你們整理的指令表裡面也有,只是感覺它的功能跟for
06/11 17:28, 25F

06/11 17:28, 7年前 , 26F
迴圈很像,不太清楚它在意義上有什麼差別。
06/11 17:28, 26F

06/11 17:46, 7年前 , 27F
gl和for風馬牛不相及。
06/11 17:46, 27F

06/11 17:48, 7年前 , 28F
若沒明白gl是什麼意思,看手冊推敲gl(3,2,12)是什麼結果
06/11 17:48, 28F

06/12 17:15, 7年前 , 29F
以三個分類變數,每個執行2次,列出前12筆?!
06/12 17:15, 29F

06/12 20:15, 7年前 , 30F
差不多了。產生一個因子,有3類,每次2個重覆,共12個
06/12 20:15, 30F

06/13 22:50, 7年前 , 31F
了解,謝謝andrew大~
06/13 22:50, 31F
文章代碼(AID): #1R5r11cm (R_Language)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1R5r11cm (R_Language)