作者PhysicsBoy (翟南)
看板R_Language
标题[问题] 使用function的执行速度
时间Thu Sep 10 23:32:06 2015
[问题类型]:
效能谘询(我想让R 跑更快)
[软体熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
问题是关於运算速度的差异
1.在A function中又使用了B function作运算
Ex.
r = abs(diff(P[(t-(N+1)):(t-1)]))
sum(r)/N
2.先执行B function,将结果以b储存,在将b用A function作运算
Ex.
sum(abs(diff(P[(t-(N+1)):(t-1)])))/N
以上两种写法想请教一下,在执行的速度上会有很大的差异吗?
小弟完整的程式中会是包更多个function
烦请大大们给予点建议,谢谢 ^^
[程式范例]:
--
离开你的视线~让情绪完完整整的宣泄~
我想今夜就这样吧~
反正孤独也无所谓~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.228.141.5
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1441899128.A.3B9.html
※ 编辑: PhysicsBoy (61.228.141.5), 09/10/2015 23:32:35
1F:→ celestialgod: 少复制一次记忆体,应该有差 09/11 00:06
2F:→ celestialgod: 但是差异应该很小 09/11 00:06
3F:→ celestialgod: 你可以rbenchmark 1000次看看 09/11 00:07
4F:→ andrew43: 考虑程式码开发与维护的成本常常比执行速度还重要很多。 09/11 13:57
5F:→ andrew43: 如果与都写在一起,要除虫或改写会比较难。请考虑这点。 09/11 13:59
6F:→ celestialgod: 所以这时候要推荐magrittr 09/11 14:00
7F:→ celestialgod: P %>% '['((t-(N+1)):(t-1)) %>% diff %>% abs %>% 09/11 14:01
8F:→ celestialgod: sum %>% divide_by(N) 09/11 14:01
9F:→ celestialgod: magrittr可以在板上搜寻到介绍文章 09/11 14:01
10F:→ PhysicsBoy: 长知识了,有空来研究一下,至於维护就靠详细笔记^^ 09/11 14:59
11F:推 andrew43: 注意程式码过度相依的问题。只是原则没有绝对。 09/11 21:41
12F:推 Edster: 什麽是程式码过度相依? 09/11 23:13
13F:→ andrew43: 例如函数A里使用函数B,如果函数B要改,就改函数B就好。 09/12 00:33
14F:→ andrew43: 若都写在一起成函数C,想改变原本函数B的部份都要改写。 09/12 00:36
15F:→ andrew43: 简单来说,避免「牵一发而动全身」就是了。 09/12 00:38
16F:→ andrew43: 至於相依,在这个例子不太明显。在开发package可能会明 09/12 00:39
17F:→ andrew43: 白一点。 09/12 00:40
18F:→ celestialgod: 把a大的话翻译一下,应该是重复使用的程式应该独立 09/12 00:40
19F:→ celestialgod: 避免更改时只有更动到部分的block 09/12 00:40
20F:→ andrew43: 相依就像A函数的使用方法被B函数决定。一改B函数,A就错 09/12 00:41
21F:→ andrew43: 了。 09/12 00:42
22F:→ celestialgod: 针对性的函数,不能一体适用... 09/12 00:42
23F:→ celestialgod: 这时候要考虑用class去做函数方法运用 09/12 00:43
24F:→ celestialgod: 或是加入case control避免更动其中一部分的函数 09/12 00:43
25F:→ celestialgod: 造成其他函数的结果出问题 或是 不正确运行 09/12 00:44
26F:→ andrew43: 这些都只是原则,没有一定要怎麽做。好用好改就好。 09/12 00:45
27F:→ andrew43: 多谢c兄帮忙解释。 09/12 00:45
28F:→ celestialgod: 我上次看dr的原始码看得很痛苦= = 09/12 00:46
29F:→ celestialgod: 他东拆拆西拆拆都看不懂了...叹气... 09/12 00:47
30F:→ celestialgod: 我有时候也不懂到底拆分出常用的CODE是否真的会 09/12 00:48
31F:→ celestialgod: 比较好 09/12 00:48
32F:→ celestialgod: 我知道至少在修改跟维护上面会方便很多 09/12 00:49
33F:→ celestialgod: 在读者眼中可能不见得是好事... 09/12 00:49
34F:→ celestialgod: 可能两个稍微不同的CASE用同一个函数处理 09/12 00:50
35F:→ celestialgod: 可能要花很多时间去找相异之处 09/12 00:50
36F:→ celestialgod: 一切真的是看每个人 09/12 00:50
37F:→ andrew43: 如果看到作者的UML,说不定就秒看懂了~ 09/12 00:59
38F:→ celestialgod: 所以应该建议r package在打包时做network 09/12 01:14