向量可以说是S语言继承的一大优点,许多人对此津津乐道,虽然S语言也有循环结构,但许多人对于用S语言做循环“嗤之以鼻”。偶也曾持有这种观点,但自从遇见了一篇外国人写的文献,观点有了一些转变。
Cribari-Neto等在文章中对R和S-plus的运行速度进行了比较,结果如下:
从中我们可以看出:
(1)实际上对于几万次循环而言,R的向量与循环的速度差别很小,但在s-plus中的差别就很大;
(2)如果都用向量,s-plus要比R快很多;如果都用循环,R则要比s-plus快很多。
当然,能用向量应该尽量用向量,不习惯用向量的人其实也不必为在R中用了太多的循环而觉得在糟蹋R,重要的是要使代码更加明晰,编写更加方便(如果对速度要求特别高的话可以考虑C语言)。