R_Language 板


LINE

# 全部讀進來在切割就好了: library(magrittr) library(data.table) library(dplyr) cv_index_f <- function(numSampleSize, numFold){ cvIndex <- rep(1:numFold, each = floor(numSampleSize / numFold)) m <- numSampleSize %% numFold if (m > 0) cvIndex %<>% c(1:m) return(cvIndex %>% sample(length(.))) } dat <- data.table(x = rnorm(100), y = rnorm(100)) cvDat <- dat %>% mutate(cvIndex = cv_index_f(nrow(.), 10)) %>% split(.$cvIndex) # > str(cvDat) # List of 10 # $ 1 :Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] -0.424 -0.181 0.241 0.31 0.874 ... # ..$ y : num [1:10] 0.272 -1.197 -0.441 -0.499 -2.136 ... # ..$ cvIndex: int [1:10] 1 1 1 1 1 1 1 1 1 1 # ..- attr(*, ".internal.selfref")=<externalptr> # $ 2 :Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] -0.533 1.25 -1.689 -1.557 -1.597 ... # ..$ y : num [1:10] 0.266 1.272 0.876 2.442 0.928 ... # ..$ cvIndex: int [1:10] 2 2 2 2 2 2 2 2 2 2 # ..- attr(*, ".internal.selfref")=<externalptr> # $ 3 :Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] 0.437 0.463 2.512 0.919 -1.206 ... # ..$ y : num [1:10] -1.3943 -1.7927 0.0471 0.9818 -1.0305 ... # ..$ cvIndex: int [1:10] 3 3 3 3 3 3 3 3 3 3 # ..- attr(*, ".internal.selfref")=<externalptr> # $ 4 :Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] -0.361 -0.34 0.621 1.266 -0.356 ... # ..$ y : num [1:10] -0.315 -0.51 -0.257 -1.533 -1.02 ... # ..$ cvIndex: int [1:10] 4 4 4 4 4 4 4 4 4 4 # ..- attr(*, ".internal.selfref")=<externalptr> # $ 5 :Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] 1.141 -1.699 -1.076 0.443 0.864 ... # ..$ y : num [1:10] 0.3992 0.6175 -1.496 -0.7096 0.0923 ... # ..$ cvIndex: int [1:10] 5 5 5 5 5 5 5 5 5 5 # ..- attr(*, ".internal.selfref")=<externalptr> # $ 6 :Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] -0.175 -0.785 -2.775 -0.315 0.375 ... # ..$ y : num [1:10] -0.262 0.811 1.763 -1.197 0.712 ... # ..$ cvIndex: int [1:10] 6 6 6 6 6 6 6 6 6 6 # ..- attr(*, ".internal.selfref")=<externalptr> # $ 7 :Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] 1.2276 0.0944 0.9955 -1.0433 0.2058 ... # ..$ y : num [1:10] -0.216 -0.691 -3.355 1.082 -1.641 ... # ..$ cvIndex: int [1:10] 7 7 7 7 7 7 7 7 7 7 # ..- attr(*, ".internal.selfref")=<externalptr> # $ 8 :Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] -0.9693 -0.3944 -0.1652 -0.0932 -1.9734 ... # ..$ y : num [1:10] -0.0336 1.1692 -0.2655 -1.9138 -1.3532 ... # ..$ cvIndex: int [1:10] 8 8 8 8 8 8 8 8 8 8 # ..- attr(*, ".internal.selfref")=<externalptr> # $ 9 :Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] -0.36 1.2 -1.17 2.5 1.16 ... # ..$ y : num [1:10] 0.4338 -0.4115 0.2877 1.2177 -0.0426 ... # ..$ cvIndex: int [1:10] 9 9 9 9 9 9 9 9 9 9 # ..- attr(*, ".internal.selfref")=<externalptr> # $ 10:Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables: # ..$ x : num [1:10] 1.583 -1.054 -0.362 -0.259 1.229 ... # ..$ y : num [1:10] -0.135 0.481 -1.52 0.627 0.72 ... # ..$ cvIndex: int [1:10] 10 10 10 10 10 10 10 10 10 10 # ..- attr(*, ".internal.selfref")=<externalptr> # 你的case就長這樣: cvDat <- fread(fileName, sep=',') %>% mutate(cvIndex = cv_index_f(nrow(.), 10)) %>% split(.$cvIndex) # 如果要移除cvIndex,可以直接這樣做 cvDat %<>% lapply(function(x) select(x, -cvIndex)) # or equivalently cvDat %<>% lapply(select, -cvIndex) # or use purrr library(purrr) cvDat %<>% map(~select(., -cvIndex)) # or equivalently cvDat %<>% map(select, -cvIndex) 題外話: 不建議你用內建函數的名稱當做變數名稱,ex: seq, file, nrow, c等 ※ 引述《MADNUG (就是比你長)》之銘言: : [問題類型]: : 效能諮詢(我想讓R 跑更快) : [軟體熟悉度]: : 使用者(已經有用R 做過不少作品) : [問題敘述]: : 小弟有個3.8G多的csv檔,但只想要隨機讀取1/10的row : fread好像沒read specific rows的指令, : 難道只能讀整個檔案再select row了嗎? : 這樣好沒效率呀..... : 若要cross-validation的話光I/O就跑死了.... : 想請問有沒有更效率一點方法呢? : 謝謝了 : [程式範例]: : 參考網路用fread + nrow and skip 寫了一下,但是更慢Orz..... : 但也是預料中啦XDD : http://pastebin.com/gW9W1GmN : [關鍵字]: : : fread : -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) http://tinyurl.com/1LhSWhpH data.table #1LhW7Tvj (R_Language) http://tinyurl.com/1LhW7Tvj dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/1LhpJCfB dplyr(下) #1Lhw8b-s (R_Language) tidyr #1Liqls1R (R_Language) http://tinyurl.com/1Liqls1R --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.74.87
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1457491357.A.F28.html
1F:推 MADNUG: 謝謝!但資料量大的話,這樣就有記憶體不足的問題了吧? 03/09 11:53
2F:→ MADNUG: 會不想整個讀進去,其中一個考量也是記憶體Orz 03/09 11:55
因為我看到你直接分段讀進去,我才想說你沒有記憶體問題XDD 如果你有記憶體問題,就只能利用硬碟做快取,看你原本那篇推文的 ff 套件吧
3F:→ MADNUG: 因為讀資料後,記憶體已經剩不多,再C-V的話就爆了 03/09 11:59
讀十次跟讀一次拆十份,記憶體確實差了兩倍... 如果沒辦法讀一次解決,就只能用ff了 不然就是讀進來 給cvIndex,每次給一個subset做validation,不去存下來就好 ※ 編輯: celestialgod (140.109.74.87), 03/09/2016 12:05:03
4F:→ MADNUG: 記憶體問題真是棘手囧...我來研究ff試試,謝謝了! 03/09 12:06







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP