作者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/cn.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