作者totolink (吐吐林克)
看板R_Language
標題[問題] for loop 加速
時間Sat Jul 11 15:05:15 2020
大家好,目前正在進行某項統計實作。
簡單來說我已寫好一個函數,輸入一個數字會輸出一個向量(長度為6)
這個動作要操作1000次
將每次輸出的向量合併成資料集
(1000列*6行)
一般來說我習慣用for loop解決
先開好一個1000*6的矩陣
用for loop 把函數重複執行1000次
將第i次的結果塞入矩陣第i列
但因為函數的計算量龐大,用迴圈速度超級慢
上網查apply家族的用法感覺是針對一個資料集進行同步運算,不符合我想將每次計算結果存進矩陣的動作
請問是否有更快的方式能完成這種工作呢?
另外我有嘗試用
compiler::cmpfun將函數編譯
但速度比原函數更慢...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.161.252 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1594451281.A.276.html
※ 編輯: totolink (223.137.161.252 臺灣), 07/11/2020 15:09:35
1F:推 hank830214: lapply + do.call + rbind.data.frame? 07/11 15:23
2F:推 Gjerry: 試著做向量運算,或者平行化你的程式 07/11 19:02
3F:推 hajebio: input 存成list 用mapply 跑試試 07/11 20:21
4F:推 andrew43: 若沒有保密問題,可把function貼出來,從function最佳 07/11 21:33
5F:→ andrew43: 化開始,甚至再一併考慮向量運算。 07/11 21:33
6F:→ andrew43: 否則,直接考慮平行運算也可以。 07/11 21:34
7F:→ khaos: 不能split→apply→combine?? 07/12 00:20
8F:推 whs2009: dopar foreach? 07/12 20:54
9F:推 celestialgod: 貼程式出來看吧 這樣只能通靈啊 07/13 00:23
10F:→ asdiy: 施主,你要問你的函數 是不是有相關沒相關可以直接用forea 07/21 00:41
11F:→ asdiy: ch 或者 parapply 這種平行速度比較快,如果有相關 那你就 07/21 00:41
12F:→ asdiy: 沒辦法用平行了 07/21 00:41